Fungsi diizinkan untuk menggunakan modul Node.js eksternal serta data lokal. Dependensi pada Node.js dikelola dengan npm dan dinyatakan dalam file metadata bernama package.json
. Runtime Node.js Cloud Functions mendukung penginstalan menggunakan npm, yarn, atau pnpm.
Untuk menentukan dependensi bagi fungsi Anda, tambahkan dependensi tersebut ke file package.json
.
Dalam contoh ini, dependensi tercantum dalam file package.json
:
{ "dependencies": { "escape-html": "^1.0.3" } }
Kemudian, dependensi tersebut akan diimpor dalam fungsi:
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')}!`);
}
Menyertakan modul Node.js lokal
Anda juga dapat menyertakan modul Node.js lokal sebagai bagian dari fungsi Anda. Caranya, deklarasikan modul Anda di package.json
menggunakan awalan file:
. Dalam contoh berikut, mymodule
merujuk ke nama modul Anda dan mymoduledir
adalah direktori yang berisi modul Anda:
{ "dependencies": { "mymodule": "file:mymoduledir" } }
Kode untuk modul lokal ini tidak boleh disimpan di folder node_modules
dalam direktori root fungsi Anda.
Langkah tambahan untuk TypeScript
TypeScript sangat membantu saat Anda menggunakan library yang memiliki informasi jenis.
Dengan begitu, TypeScript dapat mendeteksi error sintaksis dan editor dapat memberikan saran pelengkapan otomatis yang lebih baik kepada Anda. Beberapa library, seperti firebase-admin
dan firebase-functions
, dilengkapi dengan definisi TypeScript.
Banyak library yang tidak menyediakan definisi TypeScript-nya sendiri. Project DefinitelyTyped memberikan definisi yang dikelola komunitas untuk library node yang paling populer.
DefinitelyTyped memublikasikan definisi ini dengan nama paket NPM yang sama, tetapi berada dalam organisasi "@types". Misalnya, Anda dapat menginstal informasi jenis untuk library uuid
dengan perintah berikut ini:
npm install @types/uuid
Jika sudah terbiasa menggunakan TypeScript, Anda dapat menggabungkan kedua penginstalan:
npm install uuid @types/uuid
Dependensi jenis harus sama dengan dependensi library. Misalnya, Anda tidak boleh menyimpan uuid
sebagai dependensi normal dan @types/uuid
sebagai dependensi dev atau dependensi peer.
Memuat modul Node.js
Gunakan fungsi require()
Node.js untuk memuat modul Node.js mana pun yang telah diinstal. Anda juga dapat menggunakan fungsi require()
untuk mengimpor file lokal yang di-deploy bersama fungsi Anda.
import
dengan cara yang sama untuk memuat modul Node.js yang telah diinstal.
Menggunakan modul pribadi
Anda dapat menggunakan modul npm pribadi dengan menyediakan setelan untuk mengautentikasi dengan registry dalam .npmrc
file di direktori fungsi. Jika Anda menggunakan
Yarn v2 atau yang lebih baru sebagai pengelola paket, file ini akan diberi nama
.yarnrc.yml
.
Modul pribadi dari Artifact Registry
Package Repository Node.js Artifact Registry
dapat menghosting modul pribadi untuk fungsi Anda. Saat Anda men-deploy fungsi Google Cloud Functions,
proses build akan menghasilkan kredensial Artifact Registry secara otomatis
untuk akun layanan Cloud Build.
Anda hanya perlu mencantumkan repositori Artifact Registry di .npmrc
tanpa
membuat kredensial tambahan. Contoh:
@SCOPE :registry=https://REGION_ID -npm.pkg.dev/PROJECT_ID /REPOSITORY_NAME
//REGION_ID -npm.pkg.dev/PROJECT_ID /REPOSITORY_NAME :always-auth=true
Pendekatan ini juga berfungsi untuk pengelola paket Yarn v1.
Jika menggunakan Yarn v2 atau yang lebih baru, Anda hanya perlu mencantumkan repositori Artifact Registry
di .yarnrc.yml
tanpa kredensial tambahan.
Contoh:
npmScopes:
SCOPE :
npmRegistryServer: https://REGION_ID -npm.pkg.dev/PROJECT_ID /REPOSITORY_NAME
npmAlwaysAuth: true
Modul pribadi dari repositori lain
Dokumentasi npm menjelaskan cara membuat token akses hanya baca kustom. Sebaiknya jangan gunakan file .npmrc
yang dibuat di direktori home karena file tersebut berisi token baca-tulis. Izin operasi tulis tidak diperlukan selama deployment, dan dapat menimbulkan risiko keamanan.
Jangan menyertakan file .npmrc
jika Anda tidak menggunakan repositori pribadi, karena dapat memperlama waktu deployment untuk fungsi Anda.
Format file
Jika Anda menggunakan file .npmrc
untuk menetapkan token autentikasi kustom, file tersebut harus menyertakan baris yang ditampilkan di bawah.
//REGISTRY_DOMAIN /:_authToken=AUTH_TOKEN
Ganti:
- REGISTRY_DOMAIN: nama domain registry npm pribadi Anda. Jika repositori Anda dihosting dengan
npmjs.org
, tetapkan kolom ini keregistry.npmjs.org
. AUTH_TOKEN: token otorisasi untuk registry npm Anda. Token ini dapat berupa nilai teks literal dari token atau string teks
${NPM_TOKEN}
, yang diganti dengannpm
dengan nilai token sebenarnya dari lingkungan.Anda dapat menetapkan variabel lingkungan
$NPM_TOKEN
dengan argumen--set-build-env-vars
ke perintahgcloud functions deploy
. Lihat tutorial NPM tentang modul pribadi untuk mengetahui detail lebih lanjut tentang token autentikasi NPM.
Membangun fungsi dengan dependensi vendor
Dependensi vendor adalah dependensi yang sumbernya disertakan langsung dalam paket kode sumber Anda dan di-build ulang bersama kode Anda sendiri. Anda membuat dependensi Node.js yang di-vendor dan melewati penginstalannya selama deployment dengan menggunakan variabel lingkungan build GOOGLE_VENDOR_NPM_DEPENDENCIES.
Prasyarat untuk dependensi vendor
Pastikan Anda memiliki fungsi yang berfungsi dengan semua dependensi yang ingin Anda tentukan vendornya dalam file
package.json
.Instal dependensi ini secara lokal dengan menjalankan
npm install
Hapus
node_modules
dari file .gcloudignore di direktori kerja Anda.Deploy fungsi, pastikan versi Node.js lokal Anda sama dengan versi yang Anda tentukan selama deployment.
Deploy fungsi dan dependensi vendor dengan perintah berikut:
gcloud functions deploy
FUNCTION_NAME \ --runtimeRUNTIME_NAME \ --set-build-env-vars GOOGLE_VENDOR_NPM_DEPENDENCIES=trueGanti:
- FUNCTION_NAME: nama fungsi Cloud Functions yang Anda deploy
- RUNTIME_NAME: nama runtime Node.js untuk menjalankan fungsi yang di-deploy. Versi ini harus sama dengan versi Node.js yang Anda gunakan di lingkungan pengembangan lokal
Paket framework Functions adalah dependensi wajib untuk fungsi. Untuk build yang lebih cepat, sebaiknya buat paket ini menjadi vendor. Jika tidak, SDK akan didownload dan diinstal saat fungsi Anda di-build.
Jika Anda menentukan mesin npm dalam file package.json, versi npm yang ditentukan akan didownload pada waktu build. Untuk menyembunyikan perilaku ini, hapus perilaku tersebut dari file package.json Anda.