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


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

برای تعیین یک وابستگی برای تابع خود، آن را به فایل 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: prefix به این هدف برسید. در مثال زیر، mymodule به نام ماژول شما اشاره دارد و mymoduledir دایرکتوری حاوی ماژول شما است:

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

کد این ماژول محلی باید در جایی غیر از پوشه node_modules در دایرکتوری ریشه تابع شما ذخیره شود.

مراحل اضافی برای TypeScript

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

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

npm install @types/uuid

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

npm install uuid @types/uuid

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

در حال بارگیری ماژول های Node.js

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

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

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

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

ماژول های خصوصی از Artifact Registry

مخزن بسته Artifact Registry Node.js می تواند ماژول های خصوصی را برای عملکرد شما میزبانی کند. هنگامی که یک تابع Google Cloud Functions را استقرار می‌دهید، فرآیند ساخت به طور خودکار اعتبارنامه ثبت مصنوع را برای حساب سرویس 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 نسخه 2 یا بالاتر استفاده می کنید، فقط باید مخزن 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 در مورد ماژول های خصوصی را ببینید.

عملکرد خود را با وابستگی های فروشنده بسازید

وابستگی های فروشنده آنهایی هستند که منبع آنها مستقیماً در بسته کد منبع شما گنجانده شده است و در کنار کد شما بازسازی می شود. با استفاده از متغیر محیط ساخت GOOGLE_VENDOR_NPM_DEPENDENCIES، وابستگی‌های Node.js را ایجاد می‌کنید و از نصب آنها در حین استقرار صرفنظر می‌کنید.

پیش نیازهای وابستگی های فروشنده

  1. مطمئن شوید که یک تابع کار با تمام وابستگی هایی که می خواهید به فروشنده در فایل package.json خود تعریف شده است، داشته باشید.

  2. این وابستگی ها را با اجرا به صورت محلی نصب کنید

        npm install
    
  3. node_modules از فایل .gcloudignore در فهرست کاری خود حذف کنید.

  4. این تابع را مستقر کنید و مطمئن شوید که نسخه محلی Node.js شما همان چیزی است که در حین استقرار مشخص کرده اید.

  5. تابع خود و وابستگی های فروشنده را با دستور زیر مستقر کنید:

      gcloud functions deploy FUNCTION_NAME \
        --runtime RUNTIME_NAME \
        --set-build-env-vars GOOGLE_VENDOR_NPM_DEPENDENCIES=true
    

    جایگزین کنید:

    • FUNCTION_NAME : نام عملکرد Cloud Functions که در حال اجرا هستید
    • RUNTIME_NAME : نام زمان اجرا Node.js برای اجرای تابع مستقر شده تحت آن. این باید همان نسخه Node.js باشد که در محیط توسعه محلی خود استفاده کرده اید

بسته چارچوب توابع یک وابستگی لازم برای توابع است. برای ساخت سریع‌تر، فروش این بسته را توصیه می‌کنیم. اگر این کار را نکنید، زمانی که عملکرد شما ساخته شد دانلود و نصب می شود.

اگر یک موتور npm را در فایل package.json مشخص کنید، نسخه مشخص شده npm در زمان ساخت دانلود می شود. برای سرکوب این رفتار، آن را از فایل package.json خود حذف کنید.