Hàm được phép sử dụng các mô-đun Node.js bên ngoài cũng như dữ liệu cục bộ. Các phần phụ thuộc trong Node.js được quản lý bằng npm và được thể hiện trong một tệp siêu dữ liệu có tên là package.json
. Môi trường thời gian chạy Node.js của Cloud Functions hỗ trợ cài đặt bằng npm, yarn hoặc pnpm.
Để chỉ định phần phụ thuộc cho hàm, hãy thêm phần phụ thuộc đó vào tệp package.json
.
Trong ví dụ này, một phần phụ thuộc được liệt kê trong tệp package.json
:
{ "dependencies": { "escape-html": "^1.0.3" } }
Sau đó, phần phụ thuộc sẽ được nhập trong hàm:
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')}!`);
}
Bao gồm các mô-đun Node.js cục bộ
Bạn cũng có thể đưa các mô-đun Node.js cục bộ vào hàm của mình. Bạn có thể thực hiện việc này bằng cách khai báo mô-đun trong package.json
bằng tiền tố file:
. Trong ví dụ sau, mymodule
đề cập đến tên mô-đun và mymoduledir
là thư mục chứa mô-đun:
{ "dependencies": { "mymodule": "file:mymoduledir" } }
Bạn nên lưu trữ mã cho mô-đun cục bộ này ở nơi khác ngoài thư mục node_modules
trong thư mục gốc của hàm.
Các bước bổ sung cho TypeScript
TypeScript giúp ích nhiều nhất khi bạn sử dụng các thư viện có thông tin về loại.
Điều này cho phép TypeScript phát hiện lỗi cú pháp và cho phép trình chỉnh sửa đưa ra các đề xuất tự động hoàn thành tốt hơn. Một số thư viện, chẳng hạn như firebase-admin
và firebase-functions
, đi kèm với các định nghĩa TypeScript.
Nhiều thư viện không cung cấp định nghĩa TypeScript riêng. Dự án DefinitelyTyped cung cấp các định nghĩa do cộng đồng duy trì cho các thư viện nút phổ biến nhất.
DefinitelyTyped phát hành các định nghĩa này theo cùng một tên gói NPM, nhưng bên trong tổ chức "@types". Ví dụ: bạn có thể cài đặt thông tin loại cho thư viện uuid
bằng cách sau:
npm install @types/uuid
Khi đã quen thuộc hơn với TypeScript, bạn có thể kết hợp cả hai cách cài đặt:
npm install uuid @types/uuid
Các phần phụ thuộc loại phải giống với phần phụ thuộc thư viện. Ví dụ: bạn không nên lưu uuid
dưới dạng phần phụ thuộc thông thường và @types/uuid
dưới dạng phần phụ thuộc nhà phát triển hoặc phần phụ thuộc ngang hàng.
Tải các mô-đun Node.js
Sử dụng hàm require()
của Node.js để tải bất kỳ mô-đun Node.js nào bạn đã cài đặt. Bạn cũng có thể sử dụng hàm require()
để nhập các tệp cục bộ mà bạn triển khai cùng với hàm.
import
theo cách tương tự để tải bất kỳ mô-đun Node.js nào mà bạn đã cài đặt.
Sử dụng mô-đun riêng tư
Bạn có thể sử dụng mô-đun npm riêng bằng cách cung cấp các chế độ cài đặt để xác thực bằng đăng ký trong tệp .npmrc
trong thư mục của hàm. Nếu bạn đang sử dụng Yarn phiên bản 2 trở lên làm trình quản lý gói, thì tệp này sẽ có tên là .yarnrc.yml
.
Mô-đun riêng tư từ Artifact Registry
Kho lưu trữ gói Node.js của Cấu phần phần mềm có thể lưu trữ các mô-đun riêng tư cho hàm của bạn. Khi bạn triển khai một hàm Google Cloud Functions, quy trình xây dựng sẽ tự động tạo thông tin xác thực của CSDL cấu phần phần mềm cho tài khoản dịch vụ Cloud Build.
Bạn chỉ cần liệt kê kho lưu trữ Cấu phần phần mềm trong .npmrc
mà không cần tạo thêm thông tin xác thực. Ví dụ:
@SCOPE :registry=https://REGION_ID -npm.pkg.dev/PROJECT_ID /REPOSITORY_NAME
//REGION_ID -npm.pkg.dev/PROJECT_ID /REPOSITORY_NAME :always-auth=true
Phương pháp này cũng áp dụng cho trình quản lý gói Yarn phiên bản 1.
Nếu đang sử dụng Yarn phiên bản 2 trở lên, bạn chỉ cần liệt kê kho lưu trữ Cấu phần phần mềm trong .yarnrc.yml
mà không cần thêm thông tin xác thực.
Ví dụ:
npmScopes:
SCOPE :
npmRegistryServer: https://REGION_ID -npm.pkg.dev/PROJECT_ID /REPOSITORY_NAME
npmAlwaysAuth: true
Mô-đun riêng tư từ các kho lưu trữ khác
Tài liệu về npm giải thích cách tạo mã truy cập tuỳ chỉnh chỉ có thể đọc. Bạn không nên sử dụng tệp .npmrc
được tạo trong thư mục gốc vì tệp này chứa mã thông báo đọc-ghi. Quyền ghi không bắt buộc trong quá trình triển khai và có thể gây rủi ro bảo mật.
Đừng đưa tệp .npmrc
vào nếu bạn không sử dụng kho lưu trữ riêng tư, vì điều này có thể làm tăng thời gian triển khai cho các hàm của bạn.
Định dạng tệp
Nếu bạn đang sử dụng tệp .npmrc
để đặt mã thông báo xác thực tuỳ chỉnh, thì tệp đó phải bao gồm dòng hiển thị bên dưới.
//REGISTRY_DOMAIN /:_authToken=AUTH_TOKEN
Thay thế:
- REGISTRY_DOMAIN: tên miền của sổ đăng ký npm riêng. Nếu kho lưu trữ của bạn được lưu trữ bằng
npmjs.org
, hãy đặt trường này thànhregistry.npmjs.org
. AUTH_TOKEN: mã thông báo uỷ quyền cho sổ đăng ký npm. Đây có thể là giá trị văn bản cố định của mã thông báo hoặc chuỗi văn bản
${NPM_TOKEN}
mànpm
sẽ thay thế bằng giá trị mã thông báo thực tế từ môi trường.Bạn có thể đặt biến môi trường
$NPM_TOKEN
bằng đối số--set-build-env-vars
cho lệnhgcloud functions deploy
. Hãy xem hướng dẫn về NPM về các mô-đun riêng tư để biết thêm thông tin chi tiết về mã thông báo xác thực NPM.
Tạo hàm bằng các phần phụ thuộc của nhà cung cấp
Phần phụ thuộc của nhà cung cấp là những phần phụ thuộc có nguồn được đưa trực tiếp vào gói mã nguồn của bạn và được tạo lại cùng với mã của riêng bạn. Bạn tạo các phần phụ thuộc Node.js của nhà cung cấp và bỏ qua việc cài đặt các phần phụ thuộc đó trong quá trình triển khai bằng cách sử dụng biến môi trường bản dựng GOOGLE_VENDOR_NPM_DEPENDENCIES.
Điều kiện tiên quyết đối với các phần phụ thuộc của nhà cung cấp
Đảm bảo rằng bạn có một hàm đang hoạt động với tất cả các phần phụ thuộc mà bạn muốn nhà cung cấp xác định trong tệp
package.json
.Cài đặt các phần phụ thuộc này trên máy bằng cách chạy
npm install
Xoá
node_modules
khỏi tệp .gcloudignore trong thư mục đang hoạt động.Triển khai hàm, đảm bảo rằng phiên bản Node.js cục bộ của bạn giống với phiên bản bạn chỉ định trong quá trình triển khai.
Triển khai hàm và các phần phụ thuộc của nhà cung cấp bằng lệnh sau:
gcloud functions deploy
FUNCTION_NAME \ --runtimeRUNTIME_NAME \ --set-build-env-vars GOOGLE_VENDOR_NPM_DEPENDENCIES=trueThay thế:
- FUNCTION_NAME: tên của hàm Cloud Functions mà bạn đang triển khai
- RUNTIME_NAME: tên của môi trường thời gian chạy Node.js để chạy hàm đã triển khai. Đây phải là phiên bản Node.js giống với phiên bản bạn đã sử dụng trong môi trường phát triển cục bộ
Gói khung Hàm là phần phụ thuộc bắt buộc cho các hàm. Để có bản dựng nhanh hơn, bạn nên cung cấp gói này cho nhà cung cấp. Nếu không, thư viện này sẽ được tải xuống và cài đặt khi bạn tạo hàm.
Nếu bạn chỉ định một công cụ npm trong tệp package.json, thì phiên bản npm được chỉ định sẽ được tải xuống tại thời điểm tạo bản dựng. Để ngăn hành vi này, hãy xoá hành vi đó khỏi tệp package.json.