সাধারণ ক্লাসগুলির জন্য একটি ভাগ করা নোড মডিউল ব্যবহার করা


15

লক্ষ্য

সুতরাং আমি এই কাঠামোটি নিয়ে একটি প্রকল্প করছি:

  • আয়নের-অ্যাপ
  • firebase-ফাংশন
  • ভাগ

লক্ষ্যটি হল sharedমডিউলটিতে সাধারণ ইন্টারফেস এবং ক্লাস সংজ্ঞায়িত করা ।

বিধিনিষেধ

আমি আমার কোডটি স্থানীয়ভাবে এটি ব্যবহার করতে এনপিএম-এ আপলোড করতে চাই না এবং কোডটি আপলোড করার কোনও পরিকল্পনা করছি না। এটি অফলাইনে 100% কাজ করা উচিত।

যদিও উন্নয়ন প্রক্রিয়াটি অফলাইনে কাজ করা উচিত, ionic-appএবং firebase-functionsমডিউলগুলি ফায়ারবেসে (হোস্টিং ও ফাংশন) স্থাপন করা হতে চলেছে। সুতরাং, sharedমডিউলটি থেকে কোডটি সেখানে পাওয়া উচিত।

আমি এখন পর্যন্ত যা চেষ্টা করেছি

  • আমি প্রজেক্টের রেফারেন্সগুলি টাইপ স্ক্রিপ্টে ব্যবহার করার চেষ্টা করেছি , তবে এটি কাজ করার কাছাকাছি পাইনি
  • আমি এই প্রশ্নের দ্বিতীয় উত্তরের মতো এনপিএম মডিউল হিসাবে এটি ইনস্টল করে চেষ্টা করেছি
    • এটি প্রথমে ঠিকঠাক কাজ করছে বলে মনে হচ্ছে, তবে বিল্ড করার সময়, চলমান অবস্থায় আমি এই জাতীয় ত্রুটি পেয়েছি firebase deploy:
Function failed on loading user code. Error message: Code in file lib/index.js can't be loaded.
Did you list all required modules in the package.json dependencies?
Detailed stack trace: Error: Cannot find module 'shared'
    at Function.Module._resolveFilename (module.js:548:15)
    at Function.Module._load (module.js:475:25)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/srv/lib/index.js:5:18)

প্রশ্ন

টাইপস স্ক্রিপ্ট কনফিগারেশন, বা এনপিএম ব্যবহার করে কোনও ভাগ করা মডিউল তৈরির জন্য আপনার কি সমাধান আছে?

দয়া করে এটি সদৃশ হিসাবে চিহ্নিত করবেন না → স্ট্যাকওভারফ্লোতে আমি যে কোনও সমাধান খুঁজে পেয়েছি tried

অতিরিক্ত তথ্য

ভাগ করে নেওয়ার জন্য কনফিগার করুন:

// package.json
{
  "name": "shared",
  "version": "1.0.0",
  "description": "",
  "main": "dist/src/index.js",
  "types": "dist/src/index.d.ts",
  "files": [
    "dist/src/**/*"
  ],
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "publishConfig": {
    "access": "private"
  }
}

// tsconfig.json
{
  "compilerOptions": {
    "module": "commonjs",
    "rootDir": ".",
    "sourceRoot": "src",
    "outDir": "dist",
    "sourceMap": true,
    "declaration": true,
    "target": "es2017"
  }
}

ফাংশনগুলির জন্য কনফিগার করুন:

// package.json
{
  "name": "functions",
  "scripts": {
    "lint": "tslint --project tsconfig.json",
    "build": "tsc",
    "serve": "npm run build && firebase serve --only functions",
    "shell": "npm run build && firebase functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "engines": {
    "node": "8"
  },
  "main": "lib/index.js",
  "dependencies": {
    "firebase-admin": "^8.0.0",
    "firebase-functions": "^3.1.0",
    "shared": "file:../../shared"
  },
  "devDependencies": {
    "@types/braintree": "^2.20.0",
    "tslint": "^5.12.0",
    "typescript": "^3.2.2"
  },
  "private": true
}


// tsconfig.json
{
  "compilerOptions": {
    "baseUrl": "./",
    "module": "commonjs",
    "noImplicitReturns": true,
    "noUnusedLocals": false,
    "rootDir": "src",
    "outDir": "lib",
    "sourceMap": true,
    "strict": true,
    "target": "es2017"
  }
}

বর্তমান আত্মা

আমি ভাগ করা মডিউলে একটি এনপিএম স্ক্রিপ্ট যুক্ত করেছি, যা সমস্ত মডিউলগুলিতে (ইনডেক্স.জেএস ব্যতীত) অনুলিপি করে। এটিতে আমার সমস্যা রয়েছে, আমি এসসিএম-তে সদৃশ কোডটি যাচাই করেছিলাম এবং প্রতিটি পরিবর্তনে আমার সেই আদেশটি চালানো দরকার। এছাড়াও, আইডিই এটিকে কেবল আলাদা ফাইল হিসাবে বিবেচনা করে।

উত্তর:


4

উপস্থাপনা: টাইপস্ক্রিপ্ট সংকলন কীভাবে কাজ করে এবং এই package.jsonজাতীয় মডিউলে কীভাবে সংজ্ঞা দেওয়া উচিত সে সম্পর্কে আমি খুব বেশি পরিচিত নই । এই সমাধানটি, যদিও এটি কাজ করে, এটি হাতের কাজটি অর্জনের একটি হ্যাকি উপায় হিসাবে বিবেচনা করা যেতে পারে।

নিম্নলিখিত ডিরেক্টরি কাঠামো ধরে নেওয়া:

project/
  ionic-app/
    package.json
  functions/
    src/
      index.ts
    lib/
      index.js
    package.json
  shared/
    src/
      shared.ts
    lib/
      shared.js
    package.json

ফায়ারবেস পরিষেবা স্থাপন করার সময়, আপনি পূর্বনির্ধারিত এবং পোস্টডপ্লাই হুকের সাথে কমান্ডগুলি সংযুক্ত করতে পারেন । এটি firebase.jsonবৈশিষ্ট্যগুলির মাধ্যমে predeployএবং postdeployপছন্দসই পরিষেবাতে করা হয়। এই বৈশিষ্ট্যগুলিতে যথাক্রমে আপনার কোড স্থাপনের আগে এবং পরে চালানোর জন্য ক্রমান্বয়ে কমান্ডগুলির একটি অ্যারে থাকে contain তদুপরি, এই কমান্ডগুলি এনভায়রনমেন্ট ভেরিয়েবল RESOURCE_DIR(যার ডিরেক্টরি ডিরেক্টরি ./functionsবা ./ionic-appযেটি প্রযোজ্য) এবং PROJECT_DIR(ডিরেক্টরিটি সম্বলিত ডিরেক্টরি পথ ) দিয়ে ডাকা হয় firebase.json

ভিতরে predeployজন্য অ্যারে ব্যবহার করে , আমরা মেঘ ফাংশন উদাহরণস্বরূপ স্থাপন করা ফোল্ডারে ভাগ করা লাইব্রেরির কোডটি অনুলিপি করতে পারি। এই করে, আপনি কেবল ভাগ কোড অন্তর্ভুক্ত করতে যদি এটি একটি subfolder মধ্যে অবস্থিত একটি লাইব্রেরি ছিল অথবা আপনি ব্যবহার করে এটি নাম ম্যাপ করতে পারেন টাইপ করা বিষয় পথ ম্যাপিং মধ্যে একটি নামাঙ্কিত মডিউল (তাই আপনি ব্যবহার করতে পারেন )।functionsfirebase.jsontsconfig.jsonimport { hiThere } from 'shared';

predeployহুক সংজ্ঞা (গ্লোবাল ব্যবহার সম্পর্কে ইনস্টল shxউইন্ডোজ সামঞ্জস্যের জন্য):

// firebase.json
{
  "functions": {
    "predeploy": [
      "shx rm -rf \"$RESOURCE_DIR/src/shared\"", // delete existing files
      "shx cp -R \"$PROJECT_DIR/shared/.\" \"$RESOURCE_DIR/src/shared\"", // copy latest version
      "npm --prefix \"$RESOURCE_DIR\" run lint", // lint & compile
      "npm --prefix \"$RESOURCE_DIR\" run build"
    ]
  },
  "hosting": {
    "public": "ionic-app",
    ...
  }
}

অনুলিপি করা লাইব্রেরির টাইপ স্ক্রিপ্ট উত্স ফাংশন টাইপস্ক্রিপ্ট সংকলক কনফিগারেশনের সাথে সংযুক্ত করে:

// functions/tsconfig.json
{
  "compilerOptions": {
    ...,
    "baseUrl": "./src",
    "paths": {
      "shared": ["shared/src"]
    }
  },
  "include": [
    "src"
  ],
  ...
}

কপি করা লাইব্রেরির প্যাকেজ ফোল্ডারে মডিউলটির নাম, "ভাগ করা" যুক্ত করা হচ্ছে।

// functions/package.json
{
  "name": "functions",
  "scripts": {
    ...
  },
  "engines": {
    "node": "8"
  },
  "main": "lib/index.js",
  "dependencies": {
    "firebase-admin": "^8.6.0",
    "firebase-functions": "^3.3.0",
    "shared": "file:./src/shared",
    ...
  },
  "devDependencies": {
    "tslint": "^5.12.0",
    "typescript": "^3.2.2",
    "firebase-functions-test": "^0.1.6"
  },
  "private": true
}

হোস্টিং ফোল্ডারের সাথে একই পন্থা ব্যবহার করা যেতে পারে।


আশা করি এটি এমন কাউকে অনুপ্রাণিত করে যিনি টাইপস্ক্রিপ্ট সংকলনটির সাথে আরও বেশি পরিচিত এমন একটি ক্লিনার সমাধান নিয়ে এসেছেন যা এই হুকগুলি ব্যবহার করে।


3

আপনি একাধিক প্যাকেজ সহ জাভাস্ক্রিপ্ট (এবং টাইপস্ক্রিপ্ট) প্রকল্প পরিচালনার জন্য একটি সরঞ্জাম লার্নার চেষ্টা করতে চাইতে পারেন ।

সেটআপ

ধরে নিচ্ছি যে আপনার প্রকল্পের নিম্নলিখিত ডিরেক্টরি কাঠামো রয়েছে:

packages
  ionic-app
    package.json
  firebase-functions
    package.json
  shared
    package.json

আপনি যে মডিউলটি প্রকাশ করতে চান না সেগুলির সঠিক অ্যাক্সেস স্তর ( privateএবং config/accessকীগুলি) নির্দিষ্ট করার পাশাপাশি typingsআপনার sharedমডিউলে প্রবেশের বিষয়টি নিশ্চিত করে নিন :

ভাগ করুন:

{
  "name": "shared",
  "version": "1.0.0",
  "private": true,
  "config": {
    "access": "private"
  },
  "main": "lib/index.js",
  "typings": "lib/index.d.ts",
  "scripts": {
    "compile": "tsc --project tsconfig.json"
  }
}

আয়নের-অ্যাপ:

{
  "name": "ionic-app",
  "version": "1.0.0",
  "private": true,
  "config": {
    "access": "private"
  },
  "main": "lib/index.js",
  "scripts": {
    "compile": "tsc --project tsconfig.json"
  },
  "dependencies": {
    "shared": "1.0.0"
  }
}

উপরোক্ত পরিবর্তনের জায়গায়, আপনি একটি মূল স্তর তৈরি করতে পারেন package.jsonযেখানে আপনি devDependenciesআপনার প্রকল্পের সমস্ত মডিউলগুলিতে অ্যাক্সেস পেতে চান এমন কোনও নির্দিষ্ট করতে পারেন , যেমন আপনার ইউনিট পরীক্ষার কাঠামো, tslint ইত্যাদি

packages
  ionic-app
    package.json
  firebase-functions
    package.json
  shared
    package.json
package.json         // root-level, same as the `packages` dir

আপনি package.jsonএনপিএম স্ক্রিপ্টগুলি সংজ্ঞায়িত করতে এই মূল- স্তরটিও ব্যবহার করতে পারেন যা আপনার প্রকল্পের মডিউলগুলিতে (লার্নার মাধ্যমে) সংশ্লিষ্ট স্ক্রিপ্টগুলিকে অনুরোধ করবে:

{
  "name": "my-project",
  "version": "1.0.0",
  "private": true,
  "scripts": {
    "compile": "lerna run compile --stream",
    "postinstall": "lerna bootstrap",
  },
  "devDependencies": {
    "lerna": "^3.18.4",
    "tslint": "^5.20.1",
    "typescript": "^3.7.2"
  },
}

সেই জায়গায়, আপনার মূল ডিরেক্টরিতে লরনা কনফিগারেশন ফাইলটি যুক্ত করুন:

packages
  ionic-app
    package.json
  firebase-functions
    package.json
  shared
    package.json
package.json
lerna.json

নিম্নলিখিত বিষয়বস্তু সহ:

{
  "lerna": "3.18.4",
  "loglevel": "info",
  "packages": [
    "packages/*"
  ],
  "version": "1.0.0"
}

এখন আপনি যখন npm installরুট ডিরেক্টরিটি চালাবেন , postinstallআপনার রুট-স্তরে সংজ্ঞায়িত স্ক্রিপ্টটি অনুরোধ package.jsonকরবে lerna bootstrap

কী lerna bootstrapতা হ'ল এটি আপনার sharedমডিউলটিকে সিমলিংক করবে ionic-app/node_modules/sharedএবং firebase-functions/node_modules/sharedসুতরাং এই দুটি মডিউলের বিন্দু থেকে sharedঅন্য এনপিএম মডিউলের মতো দেখতে।

সংকলন

অবশ্যই, মডিউলগুলি সিমিলিং করা যথেষ্ট নয় কারণ আপনার এখনও তাদের টাইপস্ক্রিপ্ট থেকে জাভাস্ক্রিপ্টে সংকলন করতে হবে।

এটিই মূল-স্তরের package.json compileস্ক্রিপ্টটি কার্যকর হয়।

আপনি যখন npm run compileআপনার প্রকল্পের রুটে চলেছেন, এনএমপি আপনাকে অনুরোধ করবে lerna run compile --streamএবং আপনার প্রতিটি মডিউলের ফাইলটিতে lerna run compile --streamস্ক্রিপ্ট আহ্বান compileকরবে package.json

যেহেতু এখন আপনার প্রতিটি মডিউলটির নিজস্ব compileস্ক্রিপ্ট রয়েছে, আপনার tsonfig.jsonমডিউল প্রতি ফাইল থাকতে হবে। আপনি যদি সদৃশটি পছন্দ না করেন তবে আপনি মূল-স্তরের tsconfig, বা মূল স্তর থেকে উত্তরাধিকারসূত্রে মূল-স্তরের tsconfig এবং মডিউল-স্তরের tsconfig ফাইলের সংমিশ্রণ নিয়ে চলে যেতে পারেন।

আপনি যদি দেখতে চান যে এই সেটআপটি কীভাবে বাস্তব-বিশ্বের প্রকল্পে কাজ করে, সেরেনিটি / জেএসে একবার দেখুন যেখানে আমি এটি বেশ ব্যাপকভাবে ব্যবহার করছি using

বিস্তৃতি

থাকার সম্পর্কে চমৎকার জিনিস sharedমডিউল অধীনে সিমলিঙ্ক node_modulesঅধীনে firebase-functionsএবং ionic-app, এবং আপনার devDepedenciesঅধীনে node_modulesপ্রকল্পের রুট অধীনে যে আপনি যদি (তাই ভোক্তা মডিউল জন্য যে কোন জায়গায় স্থাপন করা প্রয়োজন ionic-appউদাহরণস্বরূপ), আপনি শুধু এটা সব একসঙ্গে zip পারে তার সঙ্গে node_modulesএবং সম্পর্কে চিন্তা স্থাপনার আগে ডেভ ডিপেন্ডেন্সিগুলি সরিয়ে ফেলতে হবে।

আশাকরি এটা সাহায্য করবে!

জানুয়ারী


মজাদার! আমি অবশ্যই এটি যাচাই করে দেখব এবং এটি ঠিক ফিট কিনা।
মরিসনিও

2

আর একটি সম্ভাব্য সমাধান, আপনি যদি নিজের কোডটি পরিচালনা করতে গিট ব্যবহার করে থাকেন তবে তা ব্যবহার করছেন git submodulegit submoduleআপনি ব্যবহার করে আপনার প্রকল্পের মধ্যে অন্য গিট সংগ্রহস্থল অন্তর্ভুক্ত করতে সক্ষম।

আপনার ব্যবহারের ক্ষেত্রে প্রয়োগ করা হয়েছে:

  1. আপনার ভাগ করা-গিট-রিপোজিটরির বর্তমান সংস্করণটি পুশ করুন
  2. git submodule add <shared-git-repository-link>ভাগ করা সংগ্রহস্থল লিঙ্ক করতে আপনার মূল প্রকল্প (গুলি) এর ভিতরে ব্যবহার করুন ।

এখানে ডকুমেন্টেশনের লিঙ্কটি রয়েছে: https://git-scm.com/docs/git-submodule


এটি আসলে কোনও খারাপ ধারণা নয়, তবে স্থানীয় উন্নয়ন এবং পরীক্ষা মূলত এই পদ্ধতির সাথে চলে gone
মরিসনিনো

0

যদি আমি আপনার সমস্যাটি সঠিকভাবে বুঝতে পারি তবে সমাধানটি একটি একক উত্তরের চেয়ে জটিল এবং এটি আংশিকভাবে আপনার পছন্দের উপর নির্ভর করে।

পন্থা 1: স্থানীয় কপি

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

পদ্ধতির 2: মনোরেপো

আপনি তিনটি ফোল্ডার সমন্বিত একটি একক সংগ্রহস্থল তৈরি করতে পারেন এবং সেগুলি সংযুক্ত করতে পারেন যাতে তারা একক প্রকল্প হিসাবে আচরণ করে। উপরে ইতিমধ্যে উত্তর হিসাবে, আপনি Lerna ব্যবহার করতে পারেন । এটির জন্য কিছুটা কনফিগারেশন প্রয়োজন, তবে একবার হয়ে গেলে, ফোল্ডারগুলি একক প্রকল্প হিসাবে আচরণ করবে।

পদ্ধতির 3: উপাদান

এই ফোল্ডারগুলির প্রত্যেককে একা একা উপাদান হিসাবে বিবেচনা করুন। বিট একবার দেখুন । এটি আপনাকে বড় প্রকল্পের ছোট অংশ হিসাবে ফোল্ডারগুলি সেট আপ করার অনুমতি দেবে এবং আপনি একটি ব্যক্তিগত অ্যাকাউন্ট তৈরি করতে পারেন যা কেবলমাত্র সেই উপাদানগুলিকেই আপনার জন্য সুযোগ দেয়। একবার শুরুতে সেট আপ হয়ে গেলে, এটি আপনাকে পৃথক ফোল্ডারে আপডেট প্রয়োগ করতে দেয় এবং যে পিতামাতারা সেগুলি ব্যবহার করে তা স্বয়ংক্রিয়ভাবে আপডেটগুলি পেতে পারে।

পদ্ধতির 4: প্যাকেজগুলি

আপনি সুনির্দিষ্টভাবে বলেছিলেন যে আপনি এনপিএম ব্যবহার করতে চান না, তবে আমি এটি ভাগ করতে চাই, কারণ আমি বর্তমানে নীচে বর্ণিত একটি সেট আপের সাথে কাজ করছি এবং আমার জন্য নিখুঁত কাজ করছি:

  1. প্রতিটি ফোল্ডারের জন্য প্যাকেজ ব্যবহার করুন npmবা yarnতৈরি করতে (আপনি উভয়ের জন্য স্কোপড প্যাকেজ তৈরি করতে পারেন তাই কোডটি কেবল আপনার জন্য উপলব্ধ হবে, যদি এটি আপনার উদ্বেগ হয়)।
  2. প্যারেন্ট ফোল্ডারে (এতে এই সমস্ত ফোল্ডার ব্যবহার করা হয়), তৈরি প্যাকেজগুলি নির্ভরতা হিসাবে সংযুক্ত থাকে।
  3. টাইপস্ক্রিপ্ট পাথের সাথে একত্রে ওয়েবপ্যাক পাথ এলিয়াসগুলি ব্যবহার করে আমি সমস্ত কোড বান্ডিল করতে ওয়েবপ্যাক ব্যবহার করি।

আকর্ষণীয় মতো কাজ করে এবং যখন স্থানীয় বিকাশের জন্য প্যাকেজগুলি সমন্বিত হয় তখন এটি সম্পূর্ণ অফলাইন এবং আমার অভিজ্ঞতায় কাজ করে - প্রতিটি ফোল্ডার আলাদাভাবে স্কেলযোগ্য এবং বজায় রাখা খুব সহজ।

বিঃদ্রঃ

'চাইল্ড' প্যাকেজগুলি ইতিমধ্যে আমার ক্ষেত্রে পূর্বনির্ধারিত রয়েছে কারণ সেগুলি বেশ বড় এবং আমি প্রতিটি প্যাকেজের জন্য পৃথক tsconfigs তৈরি করেছি, তবে সুন্দর জিনিসটি আপনি এটি সহজেই পরিবর্তন করতে পারবেন। অতীতে আমি উভয়ই মডিউল এবং সংকলিত ফাইলগুলিতে টাইপস্ক্রিপ্ট ব্যবহার করেছি এবং কাঁচা জেএস ফাইলগুলিও, তাই পুরো জিনিসটি খুব, বহুমুখী।

আশাকরি এটা সাহায্য করবে

***** আপডেট **** পয়েন্ট 4 অব্যাহত রাখতে: আমি ক্ষমা চাইছি আমার খারাপ। সম্ভবত আমি এটি ভুল পেয়েছি কারণ যতদূর আমি জানি, আপনি যদি কোনও মডিউল আপলোড না করেন তবে সিমলিংক করতে পারবেন না। তবুও, এটি এখানে:

  1. আপনার একটি পৃথক এনপিএম মডিউল রয়েছে, আসুন আমরা এটির firebase-functionsজন্য ব্যবহার করি। আপনি এটি সংকলন করেন বা আপনার পছন্দ অনুসারে কাঁচা টিএস ব্যবহার করেন।
  2. আপনার মূল প্রকল্পে firebase-functionsনির্ভরতা হিসাবে যুক্ত করুন ।
  3. ইন tsconfig.json, যোগ করুন"paths": {"firebase-functions: ['node_modules/firebase-functions']"}
  4. ওয়েবপ্যাকে - resolve: {extensions: ['ts', 'js'], alias: 'firebase-functions': }

এই ভাবে, আপনি থেকে আপনার সব রপ্তানি ফাংশন রেফারেন্স firebase-functionsকেবল ব্যবহার করে মডিউল import { Something } from 'firebase-functions'। ওয়েবপ্যাক এবং টাইপস্ক্রিপ্ট এটিকে নোড মডিউল ফোল্ডারে লিঙ্ক করবে। এই কনফিগারেশনের মাধ্যমে, firebase-functionsমডিউলটি টাইপস্ক্রিপ্ট বা ভ্যানিলা জাভাস্ক্রিপ্টে মডিউলটি লেখা আছে কিনা তা বিবেচনা করবে না ।

একবার সেট আপ হয়ে গেলে, এটি উত্পাদনের জন্য পুরোপুরি কাজ করবে। তারপরে, লিঙ্কটি এবং অফলাইনে কাজ করতে:

  1. firebase-functionsপ্রকল্পে এবং লিখতে নেভিগেট করুন npm link। এটি আপনার মেশিনে স্থানীয় একটি সিমিলিংক তৈরি করবে এবং আপনি প্যাকেজ.জসনে যে নামটি সেট করেছেন সেই লিঙ্কটি মানচিত্র তৈরি করবে।
  2. প্যারেন্ট প্রোজেক্টে নেভিগেট করুন এবং লিখুন npm link firebase-functions, যা সিমলিংক তৈরি করবে এবং আপনার তৈরি করা ফোল্ডারে ফায়ারবেস-ফাংশনগুলির নির্ভরতার মানচিত্র তৈরি করবে।

আমি মনে করি আপনি কিছু ভুল বুঝেছেন। আমি কখনও বলিনি যে আমি এনপিএম ব্যবহার করতে চাই না। আসলে those মডিউলগুলির তিনটিই নোড মডিউল। আমি কেবল বলেছিলাম, আমি আমার মডিউলগুলি এনপিএম-এ আপলোড করতে চাই না। আপনি কি চতুর্থ অংশটি আরও কিছুটা বিশদভাবে বর্ণনা করতে পারেন - যা আকর্ষণীয় বলে মনে হচ্ছে? সম্ভবত একটি কোড নমুনা প্রদান?
মরিসনিনো

আমি আরও একটি উত্তর যুক্ত করব, কারণ এটি মন্তব্য হিসাবে দীর্ঘ এবং
অপঠনযোগ্য হবে

আমার প্রাথমিক উত্তরটি আপডেট করেছে, আশা করি এটি আরও পরিষ্কার হয়েছে
ইভান ডিঝুরভ

0

আমি আমার কোডটি স্থানীয়ভাবে এটি ব্যবহার করতে এনপিএম-এ আপলোড করতে চাই না এবং কোডটি আপলোড করার কোনও পরিকল্পনা করছি না। এটি অফলাইনে 100% কাজ করা উচিত।

সমস্ত এনপিএম মডিউলগুলি স্থানীয়ভাবে ইনস্টল করা থাকে এবং সর্বদা অফলাইনে কাজ করে তবে আপনি যদি আপনার প্যাকেজগুলি সর্বজনীনভাবে প্রকাশ করতে না চান তবে লোকেরা এটি দেখতে পারে, আপনি ব্যক্তিগত এনএমপি রেজিস্ট্রি ইনস্টল করতে পারেন।

প্রোগেট হ'ল নুগেট / এনএমপি প্রাইভেট রিপোজিটরি সার্ভার উইন্ডোজের জন্য যা আপনি আপনার ব্যক্তিগত বিকাশ / উত্পাদন পরিবেশে আপনার ব্যক্তিগত প্যাকেজগুলি হোস্ট, অ্যাক্সেস এবং প্রকাশ করতে ব্যবহার করতে পারেন। যদিও এটি উইন্ডোতে রয়েছে তবে আমি নিশ্চিত যে লিনাক্সে বিভিন্ন বিকল্প রয়েছে।

  1. গিট সাবমডিউলগুলি খারাপ ধারণা, কোডটি ভাগ করে নেওয়ার পক্ষে এটি আসলেই একটি পুরানো ফ্যাশন উপায় যা প্যাকেজগুলির মতো রূপান্তরিত নয়, সাবমোডিয়াল পরিবর্তন এবং প্রতিশ্রুতিবদ্ধ হওয়া আসল ব্যথা।
  2. উত্স আমদানি ফোল্ডারটিও একটি খারাপ ধারণা, আবার সংস্করণও ইস্যু, কারণ যদি কেউ নির্ভরশীল ফোল্ডারে কোনও নির্ভরশীল ফোল্ডারটি পরিবর্তন করে, আবার ট্র্যাকিং এটি দুঃস্বপ্ন।
  3. প্যাকেজ বিচ্ছিন্নকরণ অনুকরণ করতে যে কোনও তৃতীয় পক্ষের স্ক্রিপ্টযুক্ত সরঞ্জামগুলি সময় নষ্ট হয় কারণ এনএমপি ইতিমধ্যে প্যাকেজগুলি এত ভালভাবে পরিচালনা করার জন্য বিভিন্ন পরিসরের সরঞ্জাম সরবরাহ করে।

এখানে আমাদের বিল্ড / স্থাপনার দৃশ্য scenario

  1. প্রতিটি ব্যক্তিগত প্যাকেজ রয়েছে .npmrcযা রয়েছে registry=https://private-npm-repository
  2. আমরা আমাদের সমস্ত ব্যক্তিগত প্যাকেজগুলি ব্যক্তিগতভাবে হোস্ট করা প্রোগেট সংগ্রহস্থলে প্রকাশ করি।
  3. প্রতিটি ব্যক্তিগত প্যাকেজটিতে প্রোজেটে নির্ভরশীল ব্যক্তিগত প্যাকেজ থাকে।
  4. আমাদের বিল্ড সার্ভার আমাদের দ্বারা সেট করা এনপিএম প্রমাণীকরণের মাধ্যমে প্রোগেট অ্যাক্সেস করে। আমাদের নেটওয়ার্কের বাইরের কারওও এই সংগ্রহস্থলটিতে অ্যাক্সেস নেই।
  5. আমাদের বিল্ড সার্ভারটি এনপিএম প্যাকেজ তৈরি করে bundled dependenciesযার ভিতরে সমস্ত প্যাকেজ রয়েছে node_modulesএবং প্রোডাকশন সার্ভারকে কখনই এনপিএম বা ব্যক্তিগত এনপিএম প্যাকেজ অ্যাক্সেস করতে হবে না কারণ সমস্ত প্রয়োজনীয় প্যাকেজ ইতিমধ্যে বান্ডিল রয়েছে।

ব্যক্তিগত এনপিএম সংগ্রহস্থল ব্যবহারের বিভিন্ন সুবিধা রয়েছে,

  1. কাস্টম স্ক্রিপ্টের দরকার নেই
  2. নোড বিড / প্রকাশ পাইপলাইনে ফিট করে
  3. প্রতিটি ব্যক্তিগত এনপিএম প্যাকেজটিতে আপনার ব্যক্তিগত গিট সোর্স নিয়ন্ত্রণের সরাসরি লিঙ্ক থাকবে, ভবিষ্যতে ত্রুটিগুলি ডিবাগ করা যায় এবং তদন্ত করা সহজ
  4. প্রতিটি প্যাকেজ হ'ল কেবল পঠনযোগ্য স্ন্যাপশট, সুতরাং একবার প্রকাশিত সংশোধন করা যাবে না এবং আপনি নতুন বৈশিষ্ট্য তৈরি করার সময় নির্ভরশীল প্যাকেজগুলির পুরানো সংস্করণ সহ বিদ্যমান কোড বেসটি প্রভাবিত হবে না।
  5. আপনি সহজেই কিছু প্যাকেজগুলি সর্বজনীন করতে পারেন এবং ভবিষ্যতে কিছু অন্যান্য সংগ্রহস্থলে যেতে পারেন
  6. যদি আপনার ব্যক্তিগত এনপিএম সরবরাহকারী সফ্টওয়্যার পরিবর্তিত হয়, উদাহরণস্বরূপ আপনি নিজের কোডটি নোডের ব্যক্তিগত এনএমপি প্যাকেজ রেজিস্ট্রি ক্লাউডে স্থানান্তরিত করার সিদ্ধান্ত নেন, আপনাকে আপনার কোডে কোনও পরিবর্তন করার প্রয়োজন হবে না।

এটি সমাধান হতে পারে তবে দুর্ভাগ্যক্রমে এটি আমার পক্ষে নয় not যদিও আপনার সময়ের জন্য ধন্যবাদ!
মরিসিনো

একটি স্থানীয় এনএমপি সংগ্রহস্থল রয়েছে যা একটি ছোট নোড সার্ভার হিসাবে ইনস্টল করা আছে, verdaccio.org
আকাশ Kava, Pest megye-

-1

আপনি যে সরঞ্জামটির সন্ধান করছেন তা হ'ল npm linknpm linkএকটি স্থানীয় এনপিএম প্যাকেজগুলিতে প্রতিলিঙ্ক সরবরাহ করে। এইভাবে আপনি কোনও প্যাকেজকে লিঙ্ক করতে পারেন এবং এটি এনএমপি প্যাকেজ লাইব্রেরিতে প্রকাশ না করে আপনার মূল প্রকল্পে ব্যবহার করতে পারেন।

আপনার ব্যবহারের ক্ষেত্রে প্রয়োগ করা হয়েছে:

  1. npm linkআপনার sharedপ্যাকেজ ভিতরে ব্যবহার করুন । এটি ভবিষ্যতের ইনস্টলগুলির জন্য সিমলিংক গন্তব্য সেট করবে।
  2. আপনার মূল প্রকল্পে নেভিগেট করুন। আপনার functionsপ্যাকেজটির ভিতরে এবং npm link sharedভাগ করা প্যাকেজটি লিঙ্ক করতে এবং এটি node_modulesডিরেক্টরিতে যুক্ত করতে ব্যবহার করুন ।

এখানে ডকুমেন্টেশনের লিঙ্কটি রয়েছে: https://docs.npmjs.com/cli/link.html


যতদূর আমি জানি, এনপিএম লিঙ্কটি কেবল পরীক্ষার জন্য এবং যদি আপনি ফলাফল কোড স্থাপন করতে চান তবে কাজ করে না (উদাহরণস্বরূপ আমার ফাংশন)।
মরিসনিনো

আমি দেখছি, আপনার প্রশ্নের সম্ভবত আপনার এই প্রয়োজনটি যুক্ত করা উচিত।
ফ্রিডো

এটি ইতিমধ্যে প্রশ্নে উল্লেখ করা হয়েছে, তবে আমি এটি পরিষ্কার করব will
মরিসনিনো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.