আমার একটি নোড.জেএস প্রকল্প রয়েছে যার জন্য নোড সংস্করণ 12 বা তারও বেশি প্রয়োজন। প্যাকেজ.জসন ফাইলে এটি নির্দিষ্ট করার কোনও উপায় আছে কি না, যাতে ইনস্টলারটি ব্যবহারকারীদের আপগ্রেড করার প্রয়োজন হয় কিনা তা স্বয়ংক্রিয়ভাবে পরীক্ষা করে তা জানাতে পারে?
আমার একটি নোড.জেএস প্রকল্প রয়েছে যার জন্য নোড সংস্করণ 12 বা তারও বেশি প্রয়োজন। প্যাকেজ.জসন ফাইলে এটি নির্দিষ্ট করার কোনও উপায় আছে কি না, যাতে ইনস্টলারটি ব্যবহারকারীদের আপগ্রেড করার প্রয়োজন হয় কিনা তা স্বয়ংক্রিয়ভাবে পরীক্ষা করে তা জানাতে পারে?
উত্তর:
আমি মনে করি আপনি "ইঞ্জিন" ক্ষেত্রটি ব্যবহার করতে পারেন:
{ "engines" : { "node" : ">=0.12" } }
যেহেতু আপনি বলছেন যে আপনার কোডটি কোনও নিচের সংস্করণগুলির সাথে অবশ্যই কাজ করবে না, আপনি সম্ভবত "ইঞ্জিনস্ট্রিক্ট" পতাকাটিও চান:
{ "engineStrict" : true }
প্যাকেজ.জসন ফাইলের জন্য ডকুমেন্টেশনগুলি এনএমপিজেএস সাইটে পাওয়া যাবে
হালনাগাদ
engineStrict
এখন অবচয় করা হয়েছে, সুতরাং এটি কেবল একটি সতর্কতা দেবে। ব্যবহারকারীরা এটি চাইলে চালানো এখন নেমে গেছে npm config set engine-strict true
।
আপডেট 2
নীচে .npmrc
বর্ণিত হিসাবে বেন , আপনার প্রকল্পের মূলটিতে একটি ফাইল তৈরি করা (আপনার প্যাকেজ.জসন ফাইলের সমান স্তর) পাঠ্যটি সহ engine-strict=true
নোড সংস্করণটি সামঞ্জস্য না হলে ইনস্টলেশনের সময় একটি ত্রুটি জোর করবে।
engineStrict
হয়েছে অবচিত বেশ কয়েক মাস, সতর্কবার্তা উত্পাদক যখন এটি ব্যবহৃত হয়। npm থেকে শুরু করে @ 3, মান ক্ষেত্রটি উপেক্ষা করা হয়, এবং ইঞ্জিন লঙ্ঘন কেবল সতর্কতা তৈরি করবে you আপনি যদি ব্যবহারকারী হিসাবে কঠোর ইঞ্জিন ক্ষেত্র প্রয়োগ করতে চান তবে এনটিএম কনফিগারেশন সেট ইঞ্জিন-কড়া সত্য চালান "
cd .. && npm i <folder-name>
প্রকল্পটি নিজেই পরীক্ষা করার জন্য মনে রাখবেন । যাইহোক, এটি এটি নিজেই একটি পুরো বিল্ড ট্রিগার করবে।
engine-strict=true
আপনার .npmrc এ যুক্ত করার ফলে এখন একই প্রভাব রয়েছে
যোগ
প্রতি package.json
"engines": {
"node": ">=10.0.0",
"npm": ">=6.0.0"
},
ফাইলটিতে .npmrc
( package.json
একই ডিরেক্টরিতে কাছাকাছি)
engine-strict=true
npm install
; yarn
পাশাপাশি কাজ করে
package.json
উপরের ( 11.13.0
এবং 6.7.0
) এর অনুরূপ একটি "ইঞ্জিন" বিভাগ এবং উপরে .npmrc
বর্ণিত সামগ্রী ব্যতীত কিছুই সেট আপ করেছি । আমার এনভিএম আমাকে একটি পুরানো নোড সংস্করণে স্যুইচ করেছে, তারপরে দৌড়েছে npm install
, তবে এটি কেবল নির্ভরতা ইনস্টল করে এবং ইঞ্জিন সংস্করণটির অমিলও উল্লেখ করে না।
ঠিক যেমন ইবাম বলেছিলেন, 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
তবে, এটি কেবল এনএমপি স্ক্রিপ্টগুলি (এবং সুতার স্ক্রিপ্টগুলি) দ্বারা সম্মানিত হয়।
.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 এর সাথে পরীক্ষিত।
এটি করার আরও একটি সহজ উপায় রয়েছে:
npm install Node@8
(প্যাকেজ.জসনের উপর নির্ভরতা হিসাবে নোড 8 সংরক্ষণ করে)এটি কাজ করে কারণ node
কেবল প্যাকেজ যা নোডকে তার প্যাকেজ বাইনারি হিসাবে চালিত করে। এটি কেবল নোড_মডিউল / .bin হিসাবে অন্তর্ভুক্ত যার অর্থ এটি কেবল প্যাকেজ স্ক্রিপ্টগুলিতে নোড উপলব্ধ করে। প্রধান শেল নয়।
টুইটারে এখানে আলোচনা দেখুন: https://twitter.com/housecor/status/962347301456015360
./node node-sass
চেয়ে .bin চালাতে হবে node-sass
। সমস্ত .bin ফাইলের জন্য একই কিনা তা নিশ্চিত নয়।
একটি মোচা পরীক্ষার কেস উদাহরণ:
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);
});});