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


İşlevlerin, harici Node.js modüllerinin yanı sıra yerel verileri kullanmasına da 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 zamanları, npm, yarn veya pnpm kullanılarak yüklemeyi destekler.

İşleviniz için bir bağımlılık belirtmek üzere bağımlılığı package.json dosyanıza ekleyin.

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şlevde içe aktarılır:

JavaScript

const onRequest = require("firebase-functions/https");
const escapeHtml = require("escape-html");

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

TypeScript

import { onRequest } from "firebase-functions/https";
import * as escapeHtml from "escape-html";

// Return a greeting with the input HTML-escaped.
export let hello = 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üllerini de dahil edebilirsiniz. Bunu, package.json içinde modülünüzü file: önekini kullanarak bildirerek 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ü dışında bir yerde saklanmalıdır.

TypeScript için ek adımlar

TypeScript, tür bilgisi içeren kitaplıklar kullandığınızda size en çok yardımcı olur. 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ıyla birlikte gönderilir.

Birçok kitaplık kendi TypeScript tanımını sağlamaz. DefinitelyTyped projesi, en popüler düğüm kitaplıkları için topluluk tarafından sürdürülen 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ğıdaki komutla yükleyebilirsiniz:

npm install @types/uuid

TypeScript'e alıştıkça 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 öğesini normal bağımlılık, @types/uuid öğesini ise geliştirme bağımlılığı veya eş bağımlılığı 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 aynı şekilde import ifadesini kullanın.

Özel modülleri kullanma

İşlevin dizinindeki bir .npmrc dosyasında kayıt defteriyle 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üllere ev sahipliği yapabilir. Google Cloud Functions işlevi dağıttığınızda derleme işlemi, Cloud Build hizmet hesabı için otomatik olarak Artifact Registry kimlik bilgileri oluşturur. Ek kimlik bilgileri oluşturmadan yalnızca .npmrc dosyanızda Artifact Registry deposunu listelemeniz gerekir. Ö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 daha yeni bir sürüm kullanıyorsanız ek kimlik bilgileri olmadan yalnızca .yarnrc.yml dosyanızda Artifact Registry deposunu listelemeniz gerekir. Örneğin:

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

Diğer depolardaki özel modüller

npm belgelerinde, özel salt okunur erişim jetonlarının nasıl oluşturulacağı açıklanmaktadır. Okuma/yazma jetonu içerdiğinden, ana dizinde oluşturulan .npmrc dosyasının kullanılmasını önermiyoruz. Dağıtım sırasında yazma izinleri gerekli değildir ve güvenlik riski oluşturabilir.

Özel depoları kullanmıyorsanız .npmrc dosyasını eklemeyin. Bu dosya, işlevlerinizin dağıtım süresini uzatabilir.

Dosya biçimi

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

//REGISTRY_DOMAIN/:_authToken=AUTH_TOKEN

Değiştir:

  • REGISTRY_DOMAIN: Özel npm kayıt defterinizin alan adı. Deponuz npmjs.org ile barındırılıyorsa bu alanı registry.npmjs.org olarak ayarlayın.
  • AUTH_TOKEN: npm kayıt defteriniz için yetkilendirme jetonu. Bu, jetonun gerçek metin değeri veya ${NPM_TOKEN} yerine ortamdaki gerçek jeton değerinin kullanıldığı metin dizesi olabilir.npm

    $NPM_TOKEN ortam değişkenini, --set-build-env-vars gcloud functions deploy komutunuzun argümanıyla ayarlayabilirsiniz. NPM kimlik doğrulama jetonu hakkında daha fazla bilgi için NPM'nin özel modüllerle ilgili eğitimine bakın.