Bağımlılıkları yönetme


İşlevlerin yerel verilerin yanı sıra harici Node.js modüllerini kullanmasına izin verilir. Node.js'deki bağımlılıklar npm ile yönetilir ve package.json adlı bir meta veri dosyasında ifade edilir. Cloud Functions Node.js çalışma ortamları, npm, yarn veya pnpm kullanılarak yüklemeyi destekler.

İşleviniz için bir bağımlılık belirtmek istiyorsanız bu bağımlılık package.json dosyanıza eklenmelidir.

Bu örnekte, package.json dosyasında bir bağımlılık listelenmiştir:

{
  "dependencies": {
    "escape-html": "^1.0.3"
  }
}

Bağımlılık daha sonra işleve aktarılır:

const escapeHtml = require('escape-html');

// Return a greeting with the input HTML-escaped.
exports.hello = functions.https.onRequest((req, res) => {
  res.send(`Hello ${escapeHtml(req.query.name || req.body.name || 'World')}!`);
});
import * as escapeHtml from 'escape-html';

// Return a greeting with the input HTML-escaped.
export let hello = functions.https.onRequest((req, res) => {
  res.send(`Hello ${escapeHtml(req.query.name || req.body.name || 'World')}!`);
}

Yerel Node.js modüllerini dahil etme

İşlevinize yerel Node.js modülleri de ekleyebilirsiniz. Bunu, file: ön ekini kullanarak modülünüzü package.json içinde tanımlayarak yapabilirsiniz. Aşağıdaki örnekte mymodule, modül adınızı, mymoduledir ise modülünüzü içeren dizini ifade eder:

{
  "dependencies": {
    "mymodule": "file:mymoduledir"
  }
}

Bu yerel modülün kodu, işlevinizin kök dizinindeki node_modules klasöründen başka bir yerde depolanmalıdır.

TypeScript için ek adımlar

TypeScript, tür bilgisi içeren kitaplıkları kullandığınızda en çok işinize yarar. Bu sayede TypeScript söz dizimi hatalarını yakalayabilir ve düzenleyiciler size daha iyi otomatik tamamlama önerileri sunabilir. firebase-admin ve firebase-functions gibi bazı kitaplıklar, TypeScript tanımlarını içerecek şekilde gönderilir.

Birçok kitaplık kendi TypeScript tanımını sağlamaz. DefinitelyTyped projesi, en popüler node kütüphaneleri için topluluk tarafından yönetilen tanımları sağlar. DefinitelyTyped, bu tanımları aynı NPM paket adı altında ancak "@types" kuruluşu içinde yayınlar. Örneğin, uuid kitaplığının tür bilgilerini aşağıdakilerle yükleyebilirsiniz:

npm install @types/uuid

TypeScript'e aşina hale geldikçe her iki yüklemeyi de birleştirebilirsiniz:

npm install uuid @types/uuid

Tür bağımlılıkları, kitaplık bağımlılığıyla aynı türde olmalıdır. Örneğin, uuid'ü normal bağımlılık, @types/uuid'ü ise geliştirici bağımlılık veya eş bağımlılık olarak kaydetmemelisiniz.

Node.js modüllerini yükleme

Yüklediğiniz Node.js modüllerini yüklemek için Node.js require() işlevini kullanın. İşlevinizle birlikte dağıttığınız yerel dosyaları içe aktarmak için require() işlevini de kullanabilirsiniz.

TypeScript'te işlev yazıyorsanız yüklediğiniz Node.js modüllerini yüklemek için import ifadesini aynı şekilde kullanın.

Özel modülleri kullanma

İşlevin dizinindeki bir .npmrc dosyasında kayıt defteri ile kimlik doğrulama ayarlarını sağlayarak özel bir npm modülü kullanabilirsiniz. Paket yöneticiniz olarak Yarn v2 veya sonraki bir sürümü kullanıyorsanız bu dosyanın adı .yarnrc.yml olur.

Artifact Registry'deki özel modüller

Artifact Registry Node.js paket deposu, işleviniz için özel modüller barındırabilir. Bir Google Cloud Functions işlevini dağıttığınızda derleme işlemi, Cloud Build hizmet hesabı için Artifact Registry kimlik bilgilerini otomatik olarak oluşturur. Ek kimlik bilgileri oluşturmadan yalnızca Artifact Registry deposunu .npmrc dosyanızda listelemeniz yeterlidir. Örneğin:

@SCOPE:registry=https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
//REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME:always-auth=true

Bu yaklaşım, Yarn v1 paket yöneticisi için de geçerlidir. Yarn v2 veya sonraki bir sürümü kullanıyorsanız ek kimlik bilgileri olmadan .yarnrc.yml dosyanızda Artifact Registry deposunu listelemeniz yeterlidir. Örneğin:

npmScopes:
  SCOPE:
    npmRegistryServer: https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
    npmAlwaysAuth: true

Diğer depolardaki özel modüller

npm dokümanlarında, özel salt okunur erişim jetonlarının nasıl oluşturulacağı açıklanmaktadır. Ana dizinde oluşturulan .npmrc dosyasını, okuma/yazma jetonu içerdiği için kullanmanızı önermeyiz. Yazma izinleri dağıtım sırasında gerekli değildir ve güvenlik riski oluşturabilir.

Özel depolama alanları kullanmıyorsanız işlevlerinizin dağıtım süresini uzatabileceğinden .npmrc dosyasını eklemeyin.

Dosya biçimi

Özel bir kimlik doğrulama jetonu ayarlamak için .npmrc dosyası kullanıyorsanız bu dosya aşağıdaki satırı içermelidir.

//REGISTRY_DOMAIN/:_authToken=AUTH_TOKEN

Değiştir:

  • REGISTRY_DOMAIN: Özel npm kayıt otoritenizin alan adıdır. Deponuz npmjs.org'te barındırılıyorsa bu alanı registry.npmjs.org olarak ayarlayın.
  • AUTH_TOKEN: npm kayıt defterinizin yetkilendirme jetonu. Bu, jetonun değişmez metin değeri veya ${NPM_TOKEN} metin dizesi olabilir. npm, bu dizeyi ortamdaki gerçek jeton değeriyle değiştirir.

    $NPM_TOKEN ortam değişkenini, gcloud functions deploy komutunuza --set-build-env-vars bağımsız değişkenini ekleyerek ayarlayabilirsiniz. NPM kimlik doğrulama jetonu hakkında daha fazla bilgi için özel modüller ile ilgili NPM eğitimine bakın.

İşlevinizi tedarikçi bağımlılıkları ile oluşturma

Tedarikçi firma bağımlılıkları, kaynağı doğrudan kaynak kod paketinize dahil edilen ve kendi kodunuzla birlikte yeniden oluşturulan bağımlılıklardır. Tedarikçi firmaya ait Node.js bağımlılıkları oluşturur ve GOOGLE_VENDOR_NPM_DEPENDENCIES derleme ortam değişkenini kullanarak dağıtım sırasında bunları yüklemeyi atlarsınız.

Tedarikçi firma bağımlılıkları için ön koşullar

  1. package.json dosyanızda tedarikçi firma tarafından tanımlanmasını istediğiniz tüm bağımlılıkları içeren çalışan bir işleviniz olduğundan emin olun.

  2. Aşağıdaki komutu çalıştırarak bu bağımlılıkları yerel olarak yükleyin:

        npm install
    
  3. Çalışma dizininizdeki .gcloudignore dosyasından node_modules dosyasını kaldırın.

  4. Yerel Node.js sürümünüzün, dağıtım sırasında belirttiğiniz sürümle aynı olduğundan emin olarak işlevi dağıtın.

  5. İşlevinizi ve tedarikçi firma bağımlılıkları aşağıdaki komutla dağıtın:

      gcloud functions deploy FUNCTION_NAME \
        --runtime RUNTIME_NAME \
        --set-build-env-vars GOOGLE_VENDOR_NPM_DEPENDENCIES=true
    

    Değiştir:

    • FUNCTION_NAME: Dağıttığınız Cloud Functions işlevinin adı
    • RUNTIME_NAME: Yayınlanan işlevinizi çalıştıracağınız Node.js çalışma zamanının adı. Bu, yerel geliştirme ortamınızda kullandığınız Node.js sürümüyle aynı olmalıdır.

İşlevler çerçevesi paketi, işlevler için gerekli bir bağımlılıktır. Daha hızlı derlemeler için bu paketi tedarikçiye vermenizi öneririz. Aksi takdirde, işleviniz derlendiğinde indirilir ve yüklenir.

package.json dosyasında bir npm motoru belirtirseniz npm'nin belirtilen sürümü derleme sırasında indirilir. Bu davranışı engellemek için package.json dosyanızdan kaldırın.