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. Các môi trường thời gian chạy Node.js của Cloud Functions hỗ trợ việc cài đặt bằng npm, yarn hoặc pnpm.
Để chỉ định một 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 vào hàm:
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")}!`);
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. Bạn có thể đạt được điều này bằng cách khai báo mô-đun trong package.json bằng cách sử dụ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" } }
Mã cho mô-đun cục bộ này phải được lưu trữ ở một 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 sẽ giúp bạn nhiều nhất khi bạn sử dụng các thư viện có thông tin về kiểu.
Điều này cho phép TypeScript phát hiện lỗi cú pháp và cho phép các trình chỉnh sửa đưa ra cho bạn 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 xuất bản 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 với TypeScript, bạn có thể kết hợp cả hai quy trình cài đặt:
npm install uuid @types/uuid
Phần phụ thuộc loại phải có cùng loại 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 một phần phụ thuộc thông thường và @types/uuid dưới dạng một phần phụ thuộc dành cho 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 Node.js require() để tải mọi mô-đun Node.js mà 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 của mình.
Nếu bạn đang viết các hàm bằng TypeScript, hãy sử dụng câu lệnh import theo cách tương tự để tải mọi mô-đun Node.js mà bạn đã cài đặt.
Sử dụng các mô-đun riêng tư
Bạn có thể sử dụng mô-đun npm riêng tư bằng cách cung cấp các chế độ cài đặt để xác thực với sổ đăng ký trong tệp .npmrc trong thư mục của hàm. Nếu bạn đang 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.
Các mô-đun riêng tư trong Artifact Registry
Kho lưu trữ gói Node.js của Artifact Registry 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 tạo sẽ tự động tạo thông tin đăng nhập Artifact Registry cho tài khoản dịch vụ Cloud Build.
Bạn chỉ cần liệt kê kho lưu trữ Artifact Registry trong .npmrc mà không cần tạo thêm thông tin đăng nhập. 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ữ Artifact Registry trong .yarnrc.yml mà không cần thông tin đăng nhập bổ sung.
Ví dụ:
npmScopes:
SCOPE:
npmRegistryServer: https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
npmAlwaysAuth: true
Các mô-đun riêng tư trong các kho lưu trữ khác
Tài liệu npm giải thích cách tạo mã truy cập tuỳ chỉnh chỉ có quyền đọc. Bạn không nên sử dụng tệp .npmrc được tạo trong thư mục chính vì tệp này chứa mã thông báo đọc-ghi. Bạn không cần có quyền ghi trong quá trình triển khai và quyền này có thể gây ra rủi ro bảo mật.
Đừng thêm tệp .npmrc nếu bạn không sử dụng kho lưu trữ riêng tư, vì tệp 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 uỷ quyền tuỳ chỉnh, thì tệp đó phải có dòng như 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 tư. 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 của bạn. Đâ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ànpmthay 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_TOKENbằng đối số--set-build-env-varscho lệnhgcloud functions deploy. Hãy xem hướng dẫn về các mô-đun riêng tư trên NPM để biết thêm thông tin chi tiết về mã thông báo xác thực NPM.