یک تابع مجاز است از ماژول های 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()
برای وارد کردن فایل های محلی که در کنار تابع خود مستقر می کنید استفاده کنید.
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 را ایجاد میکنید و از نصب آنها در حین استقرار صرفنظر میکنید.
پیش نیازهای وابستگی های فروشنده
مطمئن شوید که یک تابع کار با تمام وابستگی هایی که می خواهید به فروشنده در فایل
package.json
خود تعریف شده است، داشته باشید.این وابستگی ها را با اجرا به صورت محلی نصب کنید
npm install
node_modules
از فایل .gcloudignore در فهرست کاری خود حذف کنید.این تابع را مستقر کنید و مطمئن شوید که نسخه محلی Node.js شما همان چیزی است که در حین استقرار مشخص کرده اید.
تابع خود و وابستگی های فروشنده را با دستور زیر مستقر کنید:
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 خود حذف کنید.