ฟังก์ชันได้รับอนุญาตให้ใช้โมดูล Node.js ภายนอกและข้อมูลในเครื่อง
ระบบจะจัดการทรัพยากร Dependency ใน Node.js ด้วย npm และแสดงในไฟล์ข้อมูลเมตาที่ชื่อ package.json รันไทม์ Node.js ของ Cloud Functions รองรับการติดตั้งโดยใช้ npm, yarn หรือ pnpm
หากต้องการระบุทรัพยากร Dependency สำหรับฟังก์ชัน ให้เพิ่มลงในไฟล์ package.json
ในตัวอย่างนี้ มีการระบุทรัพยากร Dependency ในไฟล์ package.json ดังนี้
{ "dependencies": { "escape-html": "^1.0.3" } }
จากนั้นระบบจะนำเข้าทรัพยากร Dependency ในฟังก์ชัน
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")}!`);
รวมถึงโมดูล Node.js ในเครื่อง
นอกจากนี้ คุณยังรวมโมดูล Node.js ในเครื่องเป็นส่วนหนึ่งของฟังก์ชันได้ด้วย คุณทำได้โดยประกาศโมดูลใน package.json โดยใช้คำนำหน้า file: ในตัวอย่างต่อไปนี้ mymodule หมายถึงชื่อโมดูลและ mymoduledir คือ
ไดเรกทอรีที่มีโมดูล
{ "dependencies": { "mymodule": "file:mymoduledir" } }
คุณควรจัดเก็บโค้ดสำหรับโมดูลภายในเครื่องนี้ไว้ที่อื่นที่ไม่ใช่โฟลเดอร์ node_modules ภายในไดเรกทอรีรากของฟังก์ชัน
ขั้นตอนเพิ่มเติมสำหรับ TypeScript
TypeScript จะช่วยคุณได้มากที่สุดเมื่อใช้ไลบรารีที่มีข้อมูลประเภท
ซึ่งจะช่วยให้ TypeScript ตรวจจับข้อผิดพลาดทางไวยากรณ์ได้ และช่วยให้เอดิเตอร์ให้คำแนะนำการเติมข้อความอัตโนมัติได้ดียิ่งขึ้น
ไลบรารีบางรายการ เช่น firebase-admin และ
firebase-functions จะมาพร้อมกับคำจำกัดความของ TypeScript
ไลบรารีจำนวนมากไม่ได้ให้คำจำกัดความ TypeScript ของตนเอง โปรเจ็กต์ DefinitelyTyped
มีคำจำกัดความที่ชุมชนดูแลสำหรับไลบรารี Node ยอดนิยม
DefinitelyTyped เผยแพร่คำจำกัดความเหล่านี้ภายใต้ชื่อแพ็กเกจ NPM เดียวกัน แต่
ภายในองค์กร "@types" ตัวอย่างเช่น คุณสามารถติดตั้งข้อมูลประเภท
สำหรับไลบรารี uuid ได้โดยใช้คำสั่งต่อไปนี้
npm install @types/uuid
เมื่อคุ้นเคยกับ TypeScript มากขึ้น คุณอาจพบว่าตัวเองใช้การติดตั้งทั้ง 2 แบบร่วมกัน
npm install uuid @types/uuid
การอ้างอิงประเภทควรเป็นประเภทเดียวกับการอ้างอิงไลบรารี เช่น คุณไม่ควรบันทึก uuid เป็นการขึ้นต่อกันตามปกติ และ @types/uuid เป็นการขึ้นต่อกันของนักพัฒนาซอฟต์แวร์หรือการขึ้นต่อกันของเพียร์
การโหลดโมดูล Node.js
ใช้ฟังก์ชัน Node.js
require()
เพื่อโหลดโมดูล Node.js ที่คุณติดตั้งไว้ นอกจากนี้ คุณยังใช้ฟังก์ชัน
require() เพื่อนำเข้าไฟล์ในเครื่องที่ติดตั้งใช้งานพร้อมกับฟังก์ชันได้ด้วย
หากคุณเขียนฟังก์ชันใน TypeScript ให้ใช้คำสั่ง
import
ในลักษณะเดียวกันเพื่อโหลดโมดูล Node.js ที่คุณติดตั้งไว้
การใช้โมดูลส่วนตัว
คุณใช้โมดูล npm ส่วนตัวได้โดยระบุการตั้งค่าสำหรับการตรวจสอบสิทธิ์กับ
รีจิสทรีในไฟล์ .npmrc ในไดเรกทอรีของฟังก์ชัน หากคุณใช้
Yarn v2 ขึ้นไปเป็นตัวจัดการแพ็กเกจ ไฟล์นี้จะมีชื่อว่า
.yarnrc.yml
โมดูลส่วนตัวจาก Artifact Registry
ที่เก็บแพ็กเกจ Node.js ของ Artifact Registry
สามารถโฮสต์โมดูลส่วนตัวสำหรับฟังก์ชันของคุณได้ เมื่อคุณทําให้ฟังก์ชัน Google Cloud Functions
ใช้งานได้ กระบวนการบิลด์จะสร้างข้อมูลเข้าสู่ระบบ Artifact Registry
โดยอัตโนมัติสําหรับบัญชีบริการ Cloud Build
คุณเพียงแค่ต้องแสดงรายการที่เก็บ Artifact Registry ใน .npmrc โดยไม่ต้องสร้างข้อมูลเข้าสู่ระบบเพิ่มเติม เช่น
@SCOPE:registry=https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
//REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME:always-auth=true
วิธีนี้ใช้ได้กับเครื่องมือจัดการแพ็กเกจ Yarn v1 ด้วย
หากใช้ Yarn v2 ขึ้นไป คุณเพียงแค่ต้องแสดงรายการที่เก็บ Artifact Registry
ใน .yarnrc.yml โดยไม่ต้องใช้ข้อมูลเข้าสู่ระบบเพิ่มเติม
เช่น
npmScopes:
SCOPE:
npmRegistryServer: https://REGION_ID-npm.pkg.dev/PROJECT_ID/REPOSITORY_NAME
npmAlwaysAuth: true
โมดูลส่วนตัวจากที่เก็บอื่นๆ
เอกสารประกอบของ npm อธิบายวิธีสร้างโทเค็นการเข้าถึงแบบอ่านอย่างเดียวที่กำหนดเอง
เราไม่แนะนำให้ใช้ไฟล์ .npmrc ที่สร้างในโฮมไดเรกทอรี
เนื่องจากมีโทเค็นอ่าน-เขียน ไม่จำเป็นต้องมีสิทธิ์เขียนในระหว่างการติดตั้งใช้งาน และอาจก่อให้เกิดความเสี่ยงด้านความปลอดภัย
อย่าใส่ไฟล์ .npmrc หากคุณไม่ได้ใช้ที่เก็บส่วนตัว
เนื่องจากอาจทำให้เวลาในการติดตั้งใช้งานฟังก์ชันนานขึ้น
รูปแบบไฟล์
หากคุณใช้ไฟล์ .npmrc เพื่อตั้งค่าโทเค็นการให้สิทธิ์ที่กำหนดเอง ไฟล์ดังกล่าวควรมีบรรทัดที่แสดงด้านล่าง
//REGISTRY_DOMAIN/:_authToken=AUTH_TOKEN
แทนที่:
- REGISTRY_DOMAIN: ชื่อโดเมนของรีจิสทรี npm ส่วนตัว
หากที่เก็บของคุณโฮสต์ด้วย
npmjs.orgให้ตั้งค่าฟิลด์นี้เป็นregistry.npmjs.org AUTH_TOKEN: โทเค็นการให้สิทธิ์สำหรับรีจิสทรี npm ซึ่งอาจเป็นค่าข้อความตามตัวอักษรของโทเค็นหรือสตริงข้อความ
${NPM_TOKEN}ซึ่งnpmจะแทนที่ด้วยค่าโทเค็นจริงจาก สภาพแวดล้อมคุณตั้งค่าตัวแปรสภาพแวดล้อม
$NPM_TOKENด้วยอาร์กิวเมนต์--set-build-env-varsในคำสั่งgcloud functions deployได้ ดูรายละเอียดเพิ่มเติมเกี่ยวกับโทเค็นการตรวจสอบสิทธิ์ NPM ได้ที่บทแนะนำ NPM เกี่ยวกับโมดูลส่วนตัว