নির্ভরতা হ্যান্ডলিং


একটি ফাংশন বহিরাগত Node.js মডিউল পাশাপাশি স্থানীয় ডেটা ব্যবহার করার অনুমতি দেওয়া হয়। Node.js-এ নির্ভরতা npm দিয়ে পরিচালিত হয় এবং package.json নামক একটি মেটাডেটা ফাইলে প্রকাশ করা হয়। ক্লাউড ফাংশন 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')}!`);
});

টাইপস্ক্রিপ্ট

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 মডিউলও অন্তর্ভুক্ত করতে পারেন। আপনি file: prefix ব্যবহার করে package.json এ আপনার মডিউল ঘোষণা করে এটি অর্জন করতে পারেন। নিম্নলিখিত উদাহরণে, mymodule আপনার মডিউলের নামকে নির্দেশ করে এবং mymoduledir হল আপনার মডিউল ধারণকারী ডিরেক্টরি:

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

এই স্থানীয় মডিউলের কোডটি আপনার ফাংশনের রুট ডিরেক্টরির মধ্যে node_modules ফোল্ডার ছাড়া অন্য কোথাও সংরক্ষণ করা উচিত।

টাইপস্ক্রিপ্টের জন্য অতিরিক্ত পদক্ষেপ

আপনি যখন টাইপ ইনফরমেশন আছে এমন লাইব্রেরি ব্যবহার করেন তখন টাইপস্ক্রিপ্ট আপনাকে সবচেয়ে বেশি সাহায্য করে। এটি টাইপস্ক্রিপ্টকে সিনট্যাক্স ত্রুটিগুলি ধরতে দেয় এবং সম্পাদকদের আপনাকে আরও ভাল স্বয়ংসম্পূর্ণ পরামর্শ দিতে দেয়। কিছু লাইব্রেরি, যেমন firebase-admin এবং firebase-functions , টাইপস্ক্রিপ্ট সংজ্ঞা অন্তর্ভুক্ত করে।

অনেক লাইব্রেরি তাদের নিজস্ব TypeScript সংজ্ঞা প্রদান করে না। DefinitelyTyped প্রকল্পটি সর্বাধিক জনপ্রিয় নোড লাইব্রেরির জন্য সম্প্রদায়-রক্ষণাবেক্ষণের সংজ্ঞা প্রদান করে। DefinlyTyped এই সংজ্ঞাগুলিকে একই NPM প্যাকেজ নামের অধীনে প্রকাশ করে, কিন্তু "@types" সংস্থার ভিতরে। উদাহরণস্বরূপ, আপনি নিম্নলিখিতগুলির সাথে uuid লাইব্রেরির জন্য টাইপ তথ্য ইনস্টল করতে পারেন:

npm install @types/uuid

আপনি টাইপস্ক্রিপ্টের সাথে আরও পরিচিত হওয়ার সাথে সাথে আপনি উভয় ইনস্টলকে একত্রিত করতে পারেন:

npm install uuid @types/uuid

প্রকার নির্ভরতা লাইব্রেরি নির্ভরতা হিসাবে একই ধরনের হওয়া উচিত। উদাহরণস্বরূপ, আপনি uuid একটি সাধারণ নির্ভরতা হিসাবে এবং @types/uuid একটি dev নির্ভরতা বা পিয়ার নির্ভরতা হিসাবে সংরক্ষণ করবেন না।

Node.js মডিউল লোড হচ্ছে

আপনার ইনস্টল করা যেকোনো Node.js মডিউল লোড করতে Node.js require() ফাংশন ব্যবহার করুন। আপনি আপনার ফাংশনের পাশাপাশি আপনার স্থাপন করা স্থানীয় ফাইলগুলি আমদানি করতে require() ফাংশনটি ব্যবহার করতে পারেন।

আপনি যদি TypeScript-এ ফাংশন লিখছেন, তাহলে আপনার ইন্সটল করা Node.js মডিউল লোড করতে একইভাবে import স্টেটমেন্ট ব্যবহার করুন।

ব্যক্তিগত মডিউল ব্যবহার করে

আপনি ফাংশনের ডিরেক্টরিতে একটি .npmrc ফাইলে রেজিস্ট্রির সাথে প্রমাণীকরণের জন্য সেটিংস প্রদান করে একটি ব্যক্তিগত npm মডিউল ব্যবহার করতে পারেন। আপনি যদি আপনার প্যাকেজ ম্যানেজার হিসাবে ইয়ার্ন v2 বা উচ্চতর ব্যবহার করেন, তাহলে এই ফাইলটির নাম .yarnrc.yml

আর্টিফ্যাক্ট রেজিস্ট্রি থেকে ব্যক্তিগত মডিউল

একটি আর্টিফ্যাক্ট রেজিস্ট্রি Node.js প্যাকেজ সংগ্রহস্থল আপনার ফাংশনের জন্য ব্যক্তিগত মডিউল হোস্ট করতে পারে। আপনি যখন একটি Google ক্লাউড ফাংশন ফাংশন স্থাপন করেন, তখন বিল্ড প্রক্রিয়া স্বয়ংক্রিয়ভাবে ক্লাউড বিল্ড পরিষেবা অ্যাকাউন্টের জন্য আর্টিফ্যাক্ট রেজিস্ট্রি শংসাপত্র তৈরি করে। অতিরিক্ত শংসাপত্র তৈরি না করেই আপনাকে শুধুমাত্র আপনার .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

এই পদ্ধতিটি ইয়ার্ন v1 প্যাকেজ ম্যানেজারের জন্যও কাজ করে। আপনি যদি ইয়ার্ন v2 বা উচ্চতর ব্যবহার করেন, তাহলে আপনাকে অতিরিক্ত শংসাপত্র ছাড়াই আপনার .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 পরিবেশ থেকে প্রকৃত টোকেন মান দিয়ে প্রতিস্থাপন করে।

    আপনি আপনার gcloud functions deploy কমান্ডে --set-build-env-vars আর্গুমেন্ট দিয়ে $NPM_TOKEN এনভায়রনমেন্ট ভেরিয়েবল সেট করতে পারেন। NPM প্রমাণীকরণ টোকেনের আরও বিশদ বিবরণের জন্য ব্যক্তিগত মডিউলগুলির উপর NPM টিউটোরিয়াল দেখুন।

বিক্রেতা নির্ভরতা দিয়ে আপনার ফাংশন তৈরি করুন

বিক্রেতা নির্ভরতা হল সেগুলি যাদের উৎস সরাসরি আপনার সোর্স কোড প্যাকেজে অন্তর্ভুক্ত করা হয় এবং আপনার নিজের কোডের পাশাপাশি পুনর্নির্মাণ করা হয়। আপনি বিক্রেতা Node.js নির্ভরতা তৈরি করেন এবং GOOGLE_VENDOR_NPM_DEPENDENCIES বিল্ড এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করে স্থাপনার সময় সেগুলি ইনস্টল করা এড়িয়ে যান।

বিক্রেতা নির্ভরতার জন্য পূর্বশর্ত

  1. আপনি আপনার package.json ফাইলে সংজ্ঞায়িত বিক্রেতা করতে চান এমন সমস্ত নির্ভরতা সহ আপনার একটি কার্যকরী ফাংশন আছে তা নিশ্চিত করুন।

  2. চালানোর মাধ্যমে স্থানীয়ভাবে এই নির্ভরতাগুলি ইনস্টল করুন

        npm install
    
  3. আপনার কাজের ডিরেক্টরির .gcloudignore ফাইল থেকে node_modules সরান।

  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 সংস্করণ হতে হবে যা আপনি আপনার স্থানীয় উন্নয়ন পরিবেশে ব্যবহার করেছেন৷

ফাংশন ফ্রেমওয়ার্ক প্যাকেজ ফাংশনের জন্য প্রয়োজনীয় নির্ভরতা। দ্রুত নির্মাণের জন্য, আমরা এই প্যাকেজটি বিক্রি করার পরামর্শ দিই। যদি আপনি না করেন, আপনার ফাংশন তৈরি করা হলে এটি ডাউনলোড এবং ইনস্টল করা হয়।

আপনি যদি package.json ফাইলে একটি npm ইঞ্জিন উল্লেখ করেন, npm-এর নির্দিষ্ট সংস্করণটি বিল্ড টাইমে ডাউনলোড করা হয়। এই আচরণ দমন করতে, আপনার package.json ফাইল থেকে এটি সরান।