İş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.
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
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.Aşağıdaki komutu çalıştırarak bu bağımlılıkları yerel olarak yükleyin:
npm install
Çalışma dizininizdeki .gcloudignore dosyasından
node_modules
dosyasını kaldırın.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.
İşlevinizi ve tedarikçi firma bağımlılıkları aşağıdaki komutla dağıtın:
gcloud functions deploy
FUNCTION_NAME \ --runtimeRUNTIME_NAME \ --set-build-env-vars GOOGLE_VENDOR_NPM_DEPENDENCIES=trueDeğ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.