Runtime Node.js

Fungsi Cloud Run Anda berjalan di lingkungan yang terdiri dari versi sistem plus paket add-on, dukungan bahasa, dan Functions Library framework yang mendukung dan memanggil fungsi Anda. Lingkungan ini adalah diidentifikasi oleh versi bahasa, dan dikenal sebagai runtime.

Untuk informasi tentang {i>runtime<i} secara umum, dan untuk mempelajari versi Ubuntu mana yang digunakan setiap runtime Node.js, lihat lingkungan eksekusi fungsi Cloud Run.

Untuk mulai membangun dan men-deploy fungsi Cloud Run dengan Node.js, lihat dokumentasi Panduan memulai.

Untuk membangun dan menguji fungsi di sistem lokal, lihat Jalankan Fungsi dengan Framework Functions.

Pilih runtime

Fungsi Cloud Run mendukung beberapa versi Node.js, yang tercantum di Halaman Dukungan runtime. Anda dapat memilih runtime Node.js pilihan untuk fungsi Anda selama deployment:

Lingkungan eksekusi

Lingkungan eksekusi mencakup runtime, sistem operasi, paket, dan library yang memanggil fungsi Anda.

Node.js 18 dan versi yang lebih baru menggunakan lingkungan eksekusi berdasarkan Ubuntu 22.04. Versi yang lebih lama dari Node.js 18 didasarkan pada Ubuntu versi 18.04. Lihat Lingkungan eksekusi fungsi Cloud Run untuk informasi selengkapnya.

{i>Library<i} yang memanggil fungsi Anda adalah Framework Fungsi Node.js.

Struktur kode sumber

Agar fungsi Cloud Run dapat menemukan definisi fungsi Anda, masing-masing {i>runtime<i} memiliki persyaratan penataan tertentu untuk kode sumber Anda. Lihat Menulis fungsi Cloud Run untuk informasi selengkapnya.

Menentukan dependensi

Anda dapat menentukan dependensi fungsi dengan mencantumkannya dalam file package.json. Untuk informasi lebih lanjut, lihat Menentukan dependensi di Node.js.

Skrip build NPM

Secara default, runtime Node.js akan mengeksekusi npm run build jika skrip build terdeteksi di package.json. Jika memerlukan kontrol tambahan pada langkah-langkah build sebelum memulai aplikasi, Anda dapat memberikan langkah build kustom dengan menambahkan skrip gcp-build ke file package.json.

Anda dapat mencegah build agar tidak menjalankan skrip npm run build dengan:

  • Menambahkan skrip gcp-build dengan nilai kosong di file package.json Anda: "gcp-build":"".

  • Menetapkan variabel lingkungan build GOOGLE_NODE_RUN_SCRIPTS ke string kosong untuk mencegah semua skrip berjalan.

Penyelesaian fungsi asinkron

Saat menangani tugas asinkron yang melibatkan callback atau objek Promise, Anda harus secara eksplisit memberi tahu runtime bahwa fungsi Anda telah selesai mengeksekusi tugas ini. Anda bisa melakukan ini dengan beberapa cara, seperti yang ditunjukkan di contoh berikut. Kuncinya adalah kode Anda harus menunggu tugas asinkron atau Promise selesai sebelum ditampilkan; jika tidak, komponen asinkron fungsi Anda mungkin dihentikan sebelum selesai.

Fungsi berbasis peristiwa

Tampilan implisit

  exports.implicitlyReturning = async (event, context) => {
    return await asyncFunctionThatReturnsAPromise();
  };

Tampilan eksplisit

  exports.explicitlyReturning = function (event, context) {
    return asyncFunctionThatReturnsAPromise();
  };

Fungsi HTTP

Node.js

// OK: await-ing a Promise before sending an HTTP response
await Promise.resolve();

// WRONG: HTTP functions should send an
// HTTP response instead of returning.
return Promise.resolve();

// HTTP functions should signal termination by returning an HTTP response.
// This should not be done until all background tasks are complete.
res.send(200);
res.end();

// WRONG: this may not execute since an
// HTTP response has already been sent.
return Promise.resolve();

Menggunakan middleware untuk menangani permintaan HTTP

Fungsi Cloud Run HTTP Node.js menyediakan objek request dan response yang kompatibel dengan ExpressJS untuk mempermudah pemakaian permintaan HTTP. Fungsi Cloud Run otomatis membaca isi permintaan, sehingga Anda akan selalu menerima isi permintaan, terlepas dari jenis media. Artinya, permintaan HTTP harus dianggap telah dibaca sepenuhnya pada saat kode Anda dieksekusi. Penyarangan aplikasi ExpressJS harus digunakan dengan peringatan ini—khususnya, middleware yang memperkirakan isi permintaan belum dibaca mungkin tidak berperilaku seperti yang diharapkan.

Menggunakan Modul ES

Modul ECMAScript (modul ES atau ESM) adalah fitur standar TC39 yang tidak ditandai di Node versi 14+ untuk memuat modul JavaScript. Tidak seperti CommonJS, ESM menyediakan API asinkron untuk memuat modul. Alat ini juga menyediakan peningkatan sintaksis dengan pernyataan import dan export yang dapat digunakan dalam fungsi Cloud Run (bukan pernyataan require).

Untuk menggunakan ESM dalam fungsi Cloud Run, Anda harus mendeklarasikan "type": "module" dalam package.json Anda.

{
  ...
  "type": "module",
  ...
}

Selanjutnya, Anda dapat menggunakan pernyataan import dan export.