Firebase is back at Google I/O on May 10! Register now

การจัดการการพึ่งพา

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

ฟังก์ชันได้รับอนุญาตให้ใช้โมดูล Node.js ภายนอก เช่นเดียวกับข้อมูลในเครื่อง การพึ่งพาใน Node.js ได้รับการจัดการด้วย npm และแสดงในไฟล์ข้อมูลเมตาชื่อ package.json โดยทั่วไปรันไทม์ของ Cloud Functions Node.js รองรับการติดตั้งโดยใช้ npm หรือ yarn

หากต้องการระบุการพึ่งพาสำหรับฟังก์ชันของคุณ ให้เพิ่มไปยังไฟล์ package.json

ในตัวอย่างนี้ การพึ่งพาจะแสดงอยู่ในไฟล์ package.json :

{
  "dependencies": {
    "escape-html": "^1.0.3"
  }
}

จากนั้นการพึ่งพาจะถูกนำเข้าในฟังก์ชัน:

จาวาสคริปต์

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')}!`);
});

TypeScript

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')}!`);
}

รวมถึงโมดูล Node.js ในเครื่อง

คุณยังสามารถรวมโมดูล Node.js ในเครื่องเป็นส่วนหนึ่งของฟังก์ชันของคุณได้ คุณสามารถทำได้โดยการประกาศโมดูลของคุณใน package.json โดยใช้ file: คำนำหน้า ในตัวอย่างต่อไปนี้ mymodule อ้างถึงชื่อโมดูลของคุณและ mymoduledir คือไดเร็กทอรีที่มีโมดูลของคุณ:

{
  "dependencies": {
    "mymodule": "file:mymoduledir"
  }
}

โค้ดสำหรับโลคัลโมดูลนี้ควรเก็บไว้ที่อื่นที่ไม่ใช่โฟลเดอร์ node_modules ภายในไดเร็กทอรีรากของฟังก์ชันของคุณ

ขั้นตอนเพิ่มเติมสำหรับ TypeScript

TypeScript ช่วยคุณได้มากที่สุดเมื่อคุณใช้ไลบรารีที่มีข้อมูลประเภท ซึ่งช่วยให้ TypeScript ตรวจจับข้อผิดพลาดทางไวยากรณ์และช่วยให้ผู้แก้ไขให้คำแนะนำการเติมข้อความอัตโนมัติได้ดียิ่งขึ้น ไลบรารีบางตัว เช่น firebase-admin และ firebase-functions มาพร้อมกับข้อกำหนด TypeScript รวมอยู่ด้วย

ไลบรารี่จำนวนมากไม่มีการกำหนด TypeScript ของตนเอง โครงการ AbsoluteTyped ให้คำจำกัดความที่ดูแลโดยชุมชนสำหรับไลบรารีโหนดยอดนิยม AbsoluteTyped เผยแพร่คำจำกัดความเหล่านี้ภายใต้ชื่อแพ็คเกจ NPM เดียวกัน แต่อยู่ในองค์กร "@types" ตัวอย่างเช่น คุณสามารถติดตั้งข้อมูลประเภทสำหรับไลบรารี uuid ด้วยสิ่งต่อไปนี้:

npm install @types/uuid

เมื่อคุณคุ้นเคยกับ TypeScript มากขึ้น คุณอาจพบว่าตัวเองใช้การติดตั้งทั้งสองแบบร่วมกัน:

npm install uuid @types/uuid

การขึ้นต่อกันของประเภทควรเป็นประเภทเดียวกับการขึ้นต่อกันของไลบรารี ตัวอย่างเช่น คุณไม่ควรบันทึก uuid เป็นการพึ่งพาปกติและ @types/uuid เป็นการพึ่งพา dev หรือการพึ่งพาเพียร์

กำลังโหลดโมดูล Node.js

ใช้ฟังก์ชัน Node.js require() เพื่อโหลดโมดูล Node.js ใดๆ ที่คุณติดตั้งไว้ คุณยังสามารถใช้ฟังก์ชัน require() เพื่อนำเข้าไฟล์ในเครื่องที่คุณปรับใช้ควบคู่ไปกับฟังก์ชันของคุณ

หากคุณกำลังเขียนฟังก์ชันใน TypeScript ให้ใช้คำสั่ง import ในวิธีเดียวกันเพื่อโหลดโมดูล Node.js ที่คุณติดตั้งไว้

การใช้โมดูลส่วนตัว

คุณสามารถใช้ โมดูล npm ส่วนตัวได้ โดยตั้งค่าสำหรับการตรวจสอบสิทธิ์กับรีจิสทรีในไฟล์ .npmrc ในไดเร็กทอรีของฟังก์ชัน

โมดูลส่วนตัวจาก Artifact Registry

ที่เก็บแพ็กเกจ Artifact Registry Node.js สามารถโฮสต์โมดูลส่วนตัวสำหรับฟังก์ชันของคุณได้ เมื่อปรับใช้กับ 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

โมดูลส่วนตัวจากที่เก็บอื่น

เอกสาร npm อธิบายวิธีสร้างโทเค็นการเข้าถึงแบบอ่านอย่างเดียวแบบกำหนดเอง เราไม่แนะนำให้ใช้ไฟล์ .npmrc ที่สร้างขึ้นในโฮมไดเร็กทอรี เนื่องจากมีโทเค็นแบบอ่าน-เขียน ไม่จำเป็นต้องมีสิทธิ์เขียนในระหว่างการปรับใช้ และอาจก่อให้เกิดความเสี่ยงด้านความปลอดภัย

อย่ารวมไฟล์ .npmrc หากคุณไม่ได้ใช้ที่เก็บส่วนตัว เนื่องจากอาจเพิ่มเวลาปรับใช้สำหรับฟังก์ชันของคุณ

รูปแบบไฟล์

หากคุณใช้ไฟล์ .npmrc เพื่อตั้งค่าโทเค็นการรับรองความถูกต้องที่กำหนดเอง ควรมีบรรทัดที่แสดงด้านล่าง แทนที่ <YOUR_AUTH_TOKEN> ด้วยโทเค็นการรับรองความถูกต้องที่ NPM ให้มา

//registry.npmjs.org/:_authToken=<YOUR_AUTH_TOKEN>