Firebase ile modül paketleyicileri kullanma

JavaScript modülü paketleyicileri pek çok şey yapabilir, ancak özellikleri, kod tabanınıza harici kitaplıklar ekleme ve bunları kullanma olanağıdır. Modül paketleyiciler kodunuzdaki içe aktarma yollarını okur ve içe aktarılan kitaplık kodunuzla değiştirin.

Sürüm 9 ve sonraki sürümlerde Firebase JavaScript modüler API birlikte çalışacak şekilde optimize edilmiştir Firebase kodu miktarını azaltmak için modül paketleyicilerin optimizasyon özelliklerini dahil edilir.

import { initializeApp } from 'firebase/app';
import { getAuth, onAuthStateChanged, getRedirectResult } from 'firebase/auth';

const firebaseApp = initializeApp({ /* config */ });
const auth = getAuth(firebaseApp);
onAuthStateChanged(auth, user => { /* check status */ });

/**
 * getRedirectResult is unused and should not be included in the code base.
 * In addition, there are many other functions within firebase/auth that are
 * not imported and therefore should not be included as well.
 */

Kitaplıktan kullanılmayan kodları ortadan kaldırmak için uygulanan bu işlem, ağaç sallama olarak bilinir. Bunu manuel olarak kaldırmak çok zaman alır ve hataya açıktır ancak modül paketleyiciler bu kaldırma işlemini otomatikleştirebilir.

JavaScript ekosisteminde çok sayıda yüksek kaliteli modül paketleyici bulunur. Bu rehberi, web paketi Birleştirme ve esbuild.

Başlayın

Bu kılavuz, geliştirme ortamınızda npm'nin yüklü olmasını gerektirir. npm, bağımlılıkları (kitaplıklar) yüklemek ve yönetmek için kullanılır. npm'yi yüklemek için Node.js'yi yükleyin. npm otomatik olarak ayarlanır.

Çoğu geliştirici, Node.js'yi yükledikten sonra doğru şekilde kurulum yapar. Ancak, birçok geliştiricinin uygulamalarını oluştururken karşılaştığı yaygın sorunlar bahsedeceğim. Hatalarla karşılaşırsanız ortamınızda npm KSA olduğundan emin olun ve doğru izinlere sahip olduğunuzdan emin olun. sudo komutuyla yönetici olarak paket yüklemeniz gerekmez.

package.json ve Firebase'i yükleme

npm yüklendikten sonrapackage.json yerel projenizin kökü. Aşağıdaki npm komutuyla bu dosyayı oluşturun:

npm init

Bu işlem, gerekli bilgileri sağlamanız için sizi bir sihirbaza yönlendirir. Bir dosyası oluşturulduğunda aşağıdaki gibi görünür:

{
  "name": "your-package-name",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {

  }
}

Bu dosya birçok farklı şeyden sorumludur. Bu, dosya taşıma işleminin ve paketleme hakkında daha fazla bilgi edinmek isterseniz JavaScript kodu oluşturmayı öğreneceksiniz. Bu kılavuzun en önemli özelliği, "dependencies" nesne algılandı. Bu nesne, kitaplığın anahtar/değer çiftini içerecek yüklediğiniz ve kullandığı sürüm.

Bağımlılık ekleme işlemi npm install veya npm i komutu kullanılarak yapılır.

npm i firebase

npm i firebase uygulamasını çalıştırdığınızda yükleme işlemi güncellenir. Firebase'i bağımlılık olarak listelemek için package.json:

  "dependencies": {
    "firebase": "^9.0.0"
  },

Anahtar, kitaplığın adıdır. Değer ise kullanılacak sürümdür. İlgili içeriği oluşturmak için kullanılan version değeri esnektir ve bir dizi değeri kabul edebilir. Bu, anlamsal sürüm oluşturma veya semver'ı kullanabilirsiniz. Semver hakkında daha fazla bilgi için npm'nin anlamsal sürüm oluşturma rehberine bakın.

Kaynak ve derleme klasörleri

Yazdığınız kod, bir modül paketleyici tarafından okunur ve işlenir, ardından yeni bir dosya veya dosya grubu oluşturabilirsiniz. Bu iki dosya türünü ayırmak önemlidir. Modül paketleyicilerin okuduğu ve işlediği kod "kaynak" olarak bilinir. girin. İlgili içeriği oluşturmak için kullanılan oluşturdukları dosyalara "der" veya "dist" adı verilir. (dağıtım) koduna sahiptir.

Kod tabanlarında yaygın olarak kullanılan bir kurulum, kaynak kodunun src adlı bir klasörde depolanmasıdır ve oluşturulan kodu dist adlı bir klasörde toplar.

- src
 |_ index.js
 |_ animations.js
 |_ datalist.js


- dist
 |_ bundle.js

Yukarıdaki örnek dosya yapısında, index.js işlevinin her iki animations.js ve datalist.js. Bir modül paketleyici, kaynağı işlediğinde bu kod, dist klasöründe bundle.js dosyasını oluşturur. bundle.js src klasöründeki dosyalar ile içe aktarılan kitaplıkların birleşimidir de faydalı olabilir.

Git gibi kaynak kontrol sistemlerini kullanıyorsanız dist adlı klasör oluşturulur.

Giriş noktaları

Modül paketleyicilerin tümü bir giriş noktası kavramına sahiptir. Örneğin, bir dosya ağacı işlevi görür. Bir dosya başka bir dosyadaki kodu içe aktarır ve bu şekilde bu şekilde devam eder. Bu, bir dosyanın ağacın kökü olacağı anlamına gelir. Bu dosya yani giriş noktası olarak bilinir.

Önceki dosya yapısı örneğine dönelim.

- src
 |_ index.js
 |_ animations.js
 |_ datalist.js


- dist
 |_ bundle.js
// src/index.js
import { animate } from './animations';
import { createList } from './datalist';

// This is not real code, but for example purposes only
const theList = createList('users/123/tasks');
theList.addEventListener('loaded', event => {
  animate(theList);
});

src/index.js dosyası, uygulama için gereken tüm kodları içe aktarır. Bu giriş noktası dosyası paketleyiciler tarafından paketleme işlemine başlamak için kullanılır.

Firebase'i webpack ile kullanma

Firebase uygulamaları ve web paketi için belirli bir yapılandırma gerekmez. Bu bölümü genel bir web paketi yapılandırmasını ele alır.

İlk adım, geliştirme bağımlılığı olarak npm'den web paketi yüklemektir.

npm i webpack webpack-cli -D

webpack.config.js adlı yerel projenizin kökünde bir dosya oluşturun ve aşağıdaki kodu ekleyin.

const path = require('path');

module.exports = {
  // The entry point file described above
  entry: './src/index.js',
  // The location of the build folder described above
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'bundle.js'
  },
  // Optional and for development only. This provides the ability to
  // map the built code back to the original source format when debugging.
  devtool: 'eval-source-map',
};

Ardından, bağımlılık olarak Firebase'in yüklü olduğundan emin olun.

npm i firebase

Ardından, kod tabanınızda Firebase'i başlatın. Aşağıdaki kod içe aktarılır ve bir giriş noktası dosyasında Firebase'i başlatır ve "şehir" uygulayacaksınız.

// src/index.js
import { initializeApp } from 'firebase/app';
import { getFirestore, doc, getDoc } from 'firebase/firestore/lite';

const firebaseApp = initializeApp({ /* config */ });
const db = getFirestore(firebaseApp);

async function loadCity(name) {
  const cityDoc = doc(db, `cities/${name}`);
  const snapshot = await getDoc(cityDoc);
  return {
    id: snapshot.id,
    ...snapshot.data(),
  };
}

Sonraki adım, bir npm komut dosyası eklemek webpack derlemesini çalıştırıyor. package.json dosyasını aç ve aşağıdaki anahtar/değer çiftini "scripts" nesnesine ekleyin.

  "scripts": {
    "build": "webpack --mode=development"
  },

Webpack'i çalıştırmak ve derleme klasörü oluşturmak için aşağıdaki komutu çalıştırın.

npm run build

Son olarak, dist derleme klasörünü kontrol edin. Şu ada sahip bir dosya içermelidir: Paketlenmiş uygulama ve bağımlılık kodunuzu içeren bundle.js.

Web paketi derlemenizi üretim için optimize etme hakkında daha fazla bilgi için "mod" ile ilgili resmi belgeler yapılandırma ayarını kullanın.

Firebase'i Toplayıcıyla Kullanma

Firebase uygulamaları ve birleşimi için belirli bir yapılandırma gerekmez. Bu bölümünde genel kapsamlı birleştirme yapılandırması ele alınmaktadır.

İlk adım, Rollup uygulamasını ve içe aktarmaları ve npm ile yüklenen bağımlılıkları.

npm i rollup @rollup/plugin-node-resolve -D

rollup.config.js adlı yerel projenizin kök düzeyinde bir dosya oluşturun ve şu kodu kullanabilirsiniz:

import { nodeResolve } from '@rollup/plugin-node-resolve';

export default {
  // the entry point file described above
  input: 'src/index.js',
  // the output for the build folder described above
  output: {
    file: 'dist/bundle.js',
    // Optional and for development only. This provides the ability to
    // map the built code back to the original source format when debugging.
    sourcemap: 'inline',
    // Configure Rollup to convert your module code to a scoped function
    // that "immediate invokes". See the Rollup documentation for more
    // information: https://rollupjs.org/guide/en/#outputformat
    format: 'iife'
  },
  // Add the plugin to map import paths to dependencies
  // installed with npm
  plugins: [nodeResolve()]
};

Ardından, kod tabanınızda Firebase'i başlatın. Aşağıdaki kod içe aktarılır ve bir giriş noktası dosyasında Firebase'i başlatır ve "şehir" uygulayacaksınız.

// src/index.js
import { initializeApp } from 'firebase/app';
import { getFirestore, doc, getDoc } from 'firebase/firestore/lite';

const firebaseApp = initializeApp({ /* config */ });
const db = getFirestore(firebaseApp);

async function loadCity(name) {
  const cityDoc = doc(db, `cities/${name}`);
  const snapshot = await getDoc(cityDoc);
  return {
    id: snapshot.id,
    ...snapshot.data(),
  };
}

Sonraki adım, bir npm komut dosyası eklemek API'yi kullanabilirsiniz. package.json dosyasını aç ve aşağıdaki anahtar/değer çiftini "scripts" nesnesine ekleyin.

  "scripts": {
    "build": "rollup -c rollup.config.js"
  },

Toplayıcıyı çalıştırmak ve derleme klasörünü oluşturmak için aşağıdaki komutu çalıştırın.

npm run build

Son olarak, dist derleme klasörünü kontrol edin. Şu ada sahip bir dosya içermelidir: Paketlenmiş uygulama ve bağımlılık kodunuzu içeren bundle.js.

Rollup derlemenizi üretim için optimize etme hakkında daha fazla bilgi için üretim derlemelerinin eklentileri hakkında resmi dokümanları.

Firebase'i esbuild ile kullanma

Firebase uygulamaları ve esbuild için belirli bir yapılandırma gerekmez. Bu bölümü, genel yapı yapılandırmasını ele alıyor.

İlk adım, geliştirme bağımlılığı olarak esbuild yüklemektir.

npm i esbuild -D

esbuild.config.js adlı yerel projenizin kökünde bir dosya oluşturun ve aşağıdaki kodu ekleyin.

require('esbuild').build({
  // the entry point file described above
  entryPoints: ['src/index.js'],
  // the build folder location described above
  outfile: 'dist/bundle.js',
  bundle: true,
  // Replace with the browser versions you need to target
  target: ['chrome60', 'firefox60', 'safari11', 'edge20'],
  // Optional and for development only. This provides the ability to
  // map the built code back to the original source format when debugging.
  sourcemap: 'inline',
}).catch(() => process.exit(1))

Ardından, kod tabanınızda Firebase'i başlatın. Aşağıdaki kod içe aktarılır ve bir giriş noktası dosyasında Firebase'i başlatır ve "şehir" uygulayacaksınız.

// src/index.js
import { initializeApp } from 'firebase/app';
import { getFirestore, doc, getDoc } from 'firebase/firestore/lite';

const firebaseApp = initializeApp({ /* config */ });
const db = getFirestore(firebaseApp);

async function loadCity(name) {
  const cityDoc = doc(db, `cities/${name}`);
  const snapshot = await getDoc(cityDoc);
  return {
    id: snapshot.id,
    ...snapshot.data(),
  };
}

Sonraki adım, bir npm komut dosyası eklemek esbuild'i çalıştırın. package.json dosyasını açıp ekleyin "scripts" nesnesine aşağıdaki anahtar/değer çiftini ekleyin.

  "scripts": {
    "build": "node ./esbuild.config.js"
  },

Son olarak, dist derleme klasörünü kontrol edin. Şu ada sahip bir dosya içermelidir: Paketlenmiş uygulama ve bağımlılık kodunuzu içeren bundle.js.

Yapıyı üretim için optimize etme hakkında daha fazla bilgi için küçültme ve diğer optimizasyonlar hakkındaki belgeleri inceleyin.