| انتخاب زبان: | Node.js Python |
تابع Cloud Functions میتواند از ماژولهای خارجی و وابستگیهای محلی استفاده کند. نحوه مشخص کردن و مدیریت وابستگیها به زبان زمان اجرای شما بستگی دارد.
Node.js
تابع میتواند از ماژولهای 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")}!`);
});
TypeScript
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
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 را بهعنوان وابستگی توسعه یا وابستگی همتا ذخیره کنید.
درحال بار کردن ماژولهای Node.js
از تابع Node.js
require()
برای بار کردن هر ماژول Node.js که نصب کردهاید استفاده کنید. همچنین میتوانید از تابع
require() برای وارد کردن فایلهای محلیای که درکنار تابع خود مستقر میکنید استفاده کنید.
اگر در TypeScript تابع مینویسید، از عبارت
import
به همان روش برای بار کردن هر ماژول Node.js که نصب کردهاید استفاده کنید.
استفاده از ماژولهای خصوصی
میتوانید با ارائه تنظیمات برای اصالتسنجی با دفتر ثبت در فایل .npmrc در دایرکتوری تابع، از ماژول npm خصوصی استفاده کنید. اگر از
Yarn نسخه ۲ یا بالاتر بهعنوان مدیر بستهتان استفاده میکنید، نام این فایل
.yarnrc.yml است.
مدولهای خصوصی از Artifact Registry
مخزن بسته 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 v1 نیز کار میکند.
اگر از 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 درباره واحدهای خصوصی را ببینید.
پایتون
دو روش برای مشخص کردن وابستگیهای Cloud Functions نوشتهشده در Python وجود دارد: استفاده از فایل requirements.txt مدیر بسته pip یا بستهبندی وابستگیهای محلی در کنار تابع شما.
مشخصات وابستگی بااستفاده از استاندارد Pipfile/Pipfile.lock پشتیبانی نمیشود. پروژه شما نباید شامل این فایلها باشد.
مشخص کردن وابستگیها با pip
وابستگیها در Python با pip مدیریت میشوند و در فایل فرادادهای بهنام
requirements.txt
بیان میشوند.
این فایل باید در همان فهرست راهنمای فایل main.py باشد که حاوی کد تابع شما است.
وقتی تابع خود را مستقر یا مجدداً مستقر میکنید، Cloud Functions
از pip برای بارگیری و نصب جدیدترین نسخه
وابستگیهای شما، همانطور که در فایل requirements.txt اعلام شده است، استفاده میکند.
فایل requirements.txt برای هر بسته یک خط دارد. هر خط حاوی
نام بسته و درصورت تمایل، نسخه درخواستی است. برای جزئیات بیشتر،
مرجع requirements.txt را ببینید.
برای جلوگیری از تحتتأثیر قرار گرفتن ساخت شما توسط تغییرات نسخه وابستگی، بستههای وابستگی خود را به یک نسخه خاص پین کنید.
در زیر نمونهای از فایل requirements.txt آورده شده است:
functions-framework requests==2.20.0 numpy
درحال بستهبندی وابستگیهای محلی
همچنین میتوانید وابستگیها را در کنار تابع خود بستهبندی و مستقر کنید. اگر وابستگی شما ازطریق مدیر بسته pip دردسترس نباشد یا دسترسی به اینترنت محیط Cloud Functions شما محدود شده باشد، این رویکرد مفید است.
برای مثال، میتوانید از ساختار دایرکتوری مانند زیر استفاده کنید:
myfunction/
├── main.py
└── localpackage/
├── __init__.py
└── script.py
سپس میتوانید کد را طبق معمول از localpackage بااستفاده از عبارت
import زیر وارد کنید.
# Code in main.py from localpackage import script
توجه داشته باشید که این رویکرد هیچ فایل setup.py را اجرا نخواهد کرد. بستههای دارای این فایلها همچنان میتوانند بستهبندی شوند، اما ممکن است بهدرستی در Cloud Functions اجرا نشوند.