Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. 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"
  }
}

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

JavaScript

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: prefix ในตัวอย่างต่อไปนี้ mymodule อ้างถึงชื่อโมดูลของคุณและ mymoduledir คือไดเร็กทอรีที่มีโมดูลของคุณ:

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

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

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

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

ไลบรารีจำนวนมากไม่ได้ให้คำจำกัดความของ TypeScript ของตนเอง โปรเจ็กต์ SuretyTyped ให้คำจำกัดความที่ดูแลโดยชุมชนสำหรับโหนดไลบรารียอดนิยม SureTyped เผยแพร่คำจำกัดความเหล่านี้ภายใต้ชื่อแพ็คเกจ 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>