رسیدگی به وابستگی ها


یک تابع مجاز است از ماژول‌های خارجی Node.js و همچنین داده‌های محلی استفاده کند. وابستگی‌ها در Node.js با npm مدیریت می‌شوند و در یک فایل ابرداده به نام package.json بیان می‌شوند. توابع ابری Node.js از نصب با استفاده از npm ، yarn یا pnpm پشتیبانی می‌کنند.

برای مشخص کردن یک وابستگی برای تابع خود، آن را به فایل package.json خود اضافه کنید.

در این مثال، یک وابستگی در فایل package.json فهرست شده است:

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

سپس وابستگی در تابع وارد می‌شود:

جاوا اسکریپت

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

تایپ اسکریپت

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

تایپ‌اسکریپت زمانی بیشترین کمک را به شما می‌کند که از کتابخانه‌هایی استفاده کنید که اطلاعات نوع دارند. این به تایپ‌اسکریپت اجازه می‌دهد خطاهای نحوی را تشخیص دهد و به ویرایشگرها اجازه می‌دهد پیشنهادهای تکمیل خودکار بهتری به شما ارائه دهند. برخی از کتابخانه‌ها، مانند firebase-admin و firebase-functions ، تعاریف تایپ‌اسکریپت را نیز شامل می‌شوند.

بسیاری از کتابخانه‌ها تعریف TypeScript مخصوص به خود را ارائه نمی‌دهند. پروژه CertainTyped تعاریفی را برای محبوب‌ترین کتابخانه‌های گره ارائه می‌دهد که توسط جامعه توسعه‌دهندگان نگهداری می‌شوند. CertainTyped این تعاریف را تحت همان نام بسته NPM، اما درون سازمان "types@" منتشر می‌کند. برای مثال، می‌توانید اطلاعات نوع را برای کتابخانه uuid با دستور زیر نصب کنید:

npm install @types/uuid

همانطور که با TypeScript بیشتر آشنا می‌شوید، ممکن است هر دو نصب را با هم ترکیب کنید:

npm install uuid @types/uuid

وابستگی‌های نوع باید از همان نوع وابستگی کتابخانه باشند. برای مثال، نباید uuid به عنوان یک وابستگی معمولی و @types/uuid را به عنوان یک وابستگی توسعه‌دهنده یا وابستگی نظیر ذخیره کنید.

بارگذاری ماژول‌های Node.js

از تابع require() در Node.js برای بارگذاری هر ماژول Node.js که نصب کرده‌اید استفاده کنید. همچنین می‌توانید از تابع require() برای وارد کردن فایل‌های محلی که در کنار تابع خود مستقر می‌کنید، استفاده کنید.

اگر در حال نوشتن توابع در TypeScript هستید، از دستور import به همین روش برای بارگذاری هر ماژول Node.js که نصب کرده‌اید استفاده کنید.

استفاده از ماژول‌های خصوصی

شما می‌توانید با ارائه تنظیمات احراز هویت با رجیستری در یک فایل .npmrc در دایرکتوری تابع، از یک ماژول خصوصی npm استفاده کنید. اگر از Yarn نسخه ۲ یا بالاتر به عنوان مدیر بسته خود استفاده می‌کنید، این فایل .yarnrc.yml نام دارد.

ماژول‌های خصوصی از رجیستری مصنوعات

یک مخزن بسته Artifact Registry Node.js می‌تواند میزبان ماژول‌های خصوصی برای تابع شما باشد. هنگامی که یک تابع 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 نسخه ۱ نیز کار می‌کند. اگر از Yarn نسخه ۲ یا بالاتر استفاده می‌کنید، فقط باید مخزن 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 در مورد ماژول‌های خصوصی مراجعه کنید.