আমি কীভাবে প্যাকেজ.জসনে প্রয়োজনীয় নোড.জেএস সংস্করণটি নির্দিষ্ট করতে পারি?


261

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


1
: আদম প্রতিক্রিয়া, এছাড়াও node.version ব্যবহার করে ঠিক একই ভাবে stackoverflow.com/a/48691987/3032209
Yair Kukielka


এখানে ইতিমধ্যে প্রশ্ন জিজ্ঞাসা করা হয়েছিল: ব্যবহারের জন্য নির্দিষ্ট নোড.জেএস সংস্করণটি কীভাবে প্রয়োগ করা যায়?
cilap

আমি ভাবছি যদি এমন কোনও সরঞ্জাম রয়েছে যা এপিআই ব্যবহারের পরিদর্শন করে এই ক্ষেত্রটি স্বয়ংক্রিয়ভাবে একটি উপযুক্ত মানতে সেট করতে পারে।
geekley

উত্তর:


287

আমি মনে করি আপনি "ইঞ্জিন" ক্ষেত্রটি ব্যবহার করতে পারেন:

{ "engines" : { "node" : ">=0.12" } }

যেহেতু আপনি বলছেন যে আপনার কোডটি কোনও নিচের সংস্করণগুলির সাথে অবশ্যই কাজ করবে না, আপনি সম্ভবত "ইঞ্জিনস্ট্রিক্ট" পতাকাটিও চান:

{ "engineStrict" : true }

প্যাকেজ.জসন ফাইলের জন্য ডকুমেন্টেশনগুলি এনএমপিজেএস সাইটে পাওয়া যাবে

হালনাগাদ

engineStrictএখন অবচয় করা হয়েছে, সুতরাং এটি কেবল একটি সতর্কতা দেবে। ব্যবহারকারীরা এটি চাইলে চালানো এখন নেমে গেছে npm config set engine-strict true

আপডেট 2

নীচে .npmrcবর্ণিত হিসাবে বেন , আপনার প্রকল্পের মূলটিতে একটি ফাইল তৈরি করা (আপনার প্যাকেজ.জসন ফাইলের সমান স্তর) পাঠ্যটি সহ engine-strict=trueনোড সংস্করণটি সামঞ্জস্য না হলে ইনস্টলেশনের সময় একটি ত্রুটি জোর করবে।


13
github.com/npm/npm/blob/master/CHANGELOG.md#enginestrict "খুব কমই-ব্যবহৃত package.json বিকল্প engineStrictহয়েছে অবচিত বেশ কয়েক মাস, সতর্কবার্তা উত্পাদক যখন এটি ব্যবহৃত হয়। npm থেকে শুরু করে @ 3, মান ক্ষেত্রটি উপেক্ষা করা হয়, এবং ইঞ্জিন লঙ্ঘন কেবল সতর্কতা তৈরি করবে you আপনি যদি ব্যবহারকারী হিসাবে কঠোর ইঞ্জিন ক্ষেত্র প্রয়োগ করতে চান তবে এনটিএম কনফিগারেশন সেট ইঞ্জিন-কড়া সত্য চালান "
মাইক স্টেডি

1
cd .. && npm i <folder-name>প্রকল্পটি নিজেই পরীক্ষা করার জন্য মনে রাখবেন । যাইহোক, এটি এটি নিজেই একটি পুরো বিল্ড ট্রিগার করবে।
mlunoe

6
কেন পৃথিবীতে তারা এটিকে
অবমূল্যায়ন

15
engine-strict=trueআপনার .npmrc এ যুক্ত করার ফলে এখন একই প্রভাব রয়েছে
বেন

4
@ বেন পারফেক্ট, আপনাকে ধন্যবাদ! এবং এটি প্রতিশ্রুতিবদ্ধ হতে পারে যাতে কমপক্ষে আপনার পুরো টিমের ইঞ্জিন সংস্করণ প্রয়োজনীয়তা মেনে চলতে হবে required
জোশুয়া পিন্টার

113

যোগ

প্রতি package.json

  "engines": {
    "node": ">=10.0.0",
    "npm": ">=6.0.0"
  },

ফাইলটিতে .npmrc( package.jsonএকই ডিরেক্টরিতে কাছাকাছি)

engine-strict=true

3
এটিই সবচেয়ে সহজ সমাধান যা শেষ ব্যবহারকারীকে চালানোর সময় নোডের সঠিক সংস্করণ না রাখার জন্য একটি দুর্দান্ত ফ্যাট ত্রুটি দেয় npm install; yarnপাশাপাশি কাজ করে
jcollum

এটির কোনও প্রভাব নেই বলে মনে হয়। আমি package.jsonউপরের ( 11.13.0এবং 6.7.0) এর অনুরূপ একটি "ইঞ্জিন" বিভাগ এবং উপরে .npmrcবর্ণিত সামগ্রী ব্যতীত কিছুই সেট আপ করেছি । আমার এনভিএম আমাকে একটি পুরানো নোড সংস্করণে স্যুইচ করেছে, তারপরে দৌড়েছে npm install, তবে এটি কেবল নির্ভরতা ইনস্টল করে এবং ইঞ্জিন সংস্করণটির অমিলও উল্লেখ করে না।
অ্যাড্রিয়ান

54

ঠিক যেমন ইবাম বলেছিলেন, engineStrictএখন হতাশ হয়েছে। তবে আমি এই সমাধানটি খুঁজে পেয়েছি:

চেক-version.js:

import semver from 'semver';
import { engines } from './package';

const version = engines.node;
if (!semver.satisfies(process.version, version)) {
  console.log(`Required node version ${version} not satisfied with current version ${process.version}.`);
  process.exit(1);
}

package.json:

{
  "name": "my package",
  "engines": {
    "node": ">=50.9" // intentionally so big version number
  },
  "scripts": {
    "requirements-check": "babel-node check-version.js",
    "postinstall": "npm run requirements-check"
  }
}

এখানে আরও জানতে: https://medium.com/@adambisek/how-to-check-minimum-required-node-js-version-4a78a8855a0f#.3oslqmig4

.nvmrc

এবং আরও একটি জিনিস। একটি নটফাইল '.nvmrc' নির্দিষ্ট নোড সংস্করণ প্রয়োজনের জন্য ব্যবহার করা যেতে পারে - https://github.com/creationix/nvm#nvmrc

তবে, এটি কেবল এনএমপি স্ক্রিপ্টগুলি (এবং সুতার স্ক্রিপ্টগুলি) দ্বারা সম্মানিত হয়।


2
এনভিএম দিয়ে সংস্করণ স্যুইচ করার কারণে সেট ইঞ্জিন অবমূল্যায়ন এবং বাস্তবতার যে অনেকেই এর মুখোমুখি (বাস্তবায়নের) আলোকে এটি 2019 এর সেরা উত্তর।
নৈপুণ্য

14

.nvmrc

আপনি যদি এমনভাবে এনভিএম ব্যবহার করেন যা আপনার সম্ভবত হওয়া উচিত, তবে আপনি গিট-ট্র্যাক করা .nvmrcফাইলটিতে প্রদত্ত প্রকল্পের জন্য প্রয়োজনীয় নোডেজ সংস্করণটি নির্দেশ করতে পারেন :

echo v10.15.1 > .nvmrc

এটি স্বয়ংক্রিয়ভাবে কার্যকর হয় না cd, যা বুদ্ধিমান: ব্যবহারকারীকে অবশ্যই এটি করতে হবে:

nvm use

এবং এখন নোডের সেই সংস্করণটি বর্তমান শেলের জন্য ব্যবহৃত হবে।

আপনার সাথে নোডের সংস্করণগুলি তালিকাভুক্ত করতে পারেন:

nvm list

.nvmrcএখানে নথিভুক্ত করা হয়েছে: https://github.com/creationix/nvm/tree/02997b0753f66c9790c6016ed022ed2072c22603#nvmrc

সেই নোড সংস্করণটি কীভাবে স্বয়ংক্রিয়ভাবে নির্বাচন করবেন সে cdসম্পর্কে এখানে জিজ্ঞাসা করা হয়েছিল: প্রকল্পের ভিত্তিতে নোডের সঠিক সংস্করণটি স্বয়ংক্রিয়ভাবে স্যুইচ করুন

এনভিএম 0.33.11 এর সাথে পরীক্ষিত।


8

এটি করার আরও একটি সহজ উপায় রয়েছে:

  1. npm install Node@8 (প্যাকেজ.জসনের উপর নির্ভরতা হিসাবে নোড 8 সংরক্ষণ করে)
  2. আপনার অ্যাপটি কারও জন্য নোড 8 ব্যবহার করে চলবে - এমনকি সুতা ব্যবহারকারীরাও!

এটি কাজ করে কারণ nodeকেবল প্যাকেজ যা নোডকে তার প্যাকেজ বাইনারি হিসাবে চালিত করে। এটি কেবল নোড_মডিউল / .bin হিসাবে অন্তর্ভুক্ত যার অর্থ এটি কেবল প্যাকেজ স্ক্রিপ্টগুলিতে নোড উপলব্ধ করে। প্রধান শেল নয়।

টুইটারে এখানে আলোচনা দেখুন: https://twitter.com/housecor/status/962347301456015360


5
আমি দ্বিমত পোষণ করছি, এটি সম্ভবত সমস্যাটি আড়াল করবে এবং এটি ইনস্টল না করা হলে নোডের ভিন্ন সংস্করণটি সাইডলয়েড করবে।
ব্রেন্ডন হ্যানিম্যান

7
-1 কারণ এটি ভয়ঙ্কর (সত্যই ভয়ঙ্কর) ধারণা। এটি বলার মতো যে আপনি যদি বেকার হন তবে আপনার প্রথমে কোনও সংস্থাকে তহবিল দেওয়া উচিত এবং আপনি সেখানে কাজ শুরু করতে পারেন।
ওজনমুয়েজ

2
আমার কাছে দুর্দান্ত ধারণা লাগছে। পৃথক প্রকল্পের জন্য পৃথক নোড সংস্করণ। অন্যকে আপগ্রেড না করে নিরাপদে একটি আপগ্রেড করতে পারে। কেবল ধরা কেবল বিচারের ./node node-sassচেয়ে .bin চালাতে হবে node-sass। সমস্ত .bin ফাইলের জন্য একই কিনা তা নিশ্চিত নয়।
জন

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

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

0

একটি মোচা পরীক্ষার কেস উদাহরণ:

describe('Check version of node', function () {
    it('Should test version assert', async function () {

            var version = process.version;
            var check = parseFloat(version.substr(1,version.length)) > 12.0;
            console.log("version: "+version);
            console.log("check: " +check);         
            assert.equal(check, true);
    });});

1
ইউনিট পরীক্ষা হওয়া উচিত নয়, প্যাকেজ.জসন / ডটফাইল ব্যবহার করুন
বিজিকোড

2
তবে কী, এক ইউনিট পরীক্ষা এর জন্য নকশা করা হয়েছে> .-
জ্যামি নিকোল-শেলি

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