দ্রষ্টব্য: এই পদ্ধতির আপনার পরিবর্তন করেpackage.json
পরিবর্তিত হয়, আপনার কোনও বিকল্প না থাকলে এটি ব্যবহার করুন।
আমাকে আমার স্ক্রিপ্টগুলিতে কমান্ড লাইনের যুক্তিগুলি দিতে হয়েছিল যা এমন কিছু ছিল:
"scripts": {
"start": "npm run build && npm run watch",
"watch": "concurrently \"npm run watch-ts\" \"npm run watch-node\"",
...
}
সুতরাং, এর অর্থ আমি আমার অ্যাপ্লিকেশনটি দিয়ে শুরু করি npm run start
।
এখন যদি আমি কিছু যুক্তি পাস করতে চাই তবে আমি সম্ভবত:
npm run start -- --config=someConfig
কি এই আছে হল: npm run build && npm run watch -- --config=someConfig
। এটির সাথে সমস্যা হ'ল এটি সর্বদা স্ক্রিপ্টের শেষে যুক্তি যুক্ত করে। এর অর্থ সমস্ত শৃঙ্খলাবদ্ধ স্ক্রিপ্টগুলি এই আর্গুমেন্টগুলি পায় না (আরগস সম্ভবত সকলের প্রয়োজন হয় নাও হতে পারে তবে এটি একটি ভিন্ন গল্প story)। আরও যখন লিঙ্কযুক্ত স্ক্রিপ্টগুলি কল করা হয় তখন সেই স্ক্রিপ্টগুলি পাস করা আর্গুমেন্টগুলি পাবে না। অর্থাৎ watch
স্ক্রিপ্টটি পাস করা যুক্তিগুলি পাবে না।
আমার অ্যাপ্লিকেশন এর উত্পাদন ব্যবহার হিসাবে একটি .exe
, সুতরাং এক্সে আর্গুমেন্টগুলি উত্তীর্ণ করা ভাল কাজ করে তবে বিকাশের সময় যদি এটি করতে চান তবে তা পরীক্ষামূলক হয়ে যায়।
এটি অর্জনের জন্য আমি কোনও সঠিক উপায় খুঁজে পাইনি, তাই এটি চেষ্টা করেছি।
আমি একটি জাভাস্ক্রিপ্ট ফাইল তৈরি করেছি: start-script.js
অ্যাপ্লিকেশনটির মূল স্তরে আমার একটি "default.package.json" আছে এবং "প্যাকেজ.জসন" রক্ষণাবেক্ষণের পরিবর্তে, আমি "default.package.json" বজায় রেখেছি। এর উদ্দেশ্য start-script.json
হ'ল এই লিপিগুলিতে পাস হওয়া আর্গুমেন্টগুলি পড়া default.package.json
, scripts
সন্ধান এবং অনুসন্ধান করা npm run scriptname
। এর পরে, এটি একটি নতুন তৈরি করবে package.json
এবং ডিফল্ট.প্যাকেজ.জসন থেকে ডেটাটি পরিবর্তিত স্ক্রিপ্টগুলির সাথে অনুলিপি করবে এবং তারপরে কল করবে npm run start
।
const fs = require('fs');
const { spawn } = require('child_process');
// open default.package.json
const defaultPackage = fs.readFileSync('./default.package.json');
try {
const packageOb = JSON.parse(defaultPackage);
// loop over the scripts present in this object, edit them with flags
if ('scripts' in packageOb && process.argv.length > 2) {
const passedFlags = ` -- ${process.argv.slice(2).join(' ')}`;
// assuming the script names have words, : or -, modify the regex if required.
const regexPattern = /(npm run [\w:-]*)/g;
const scriptsWithFlags = Object.entries(packageOb.scripts).reduce((acc, [key, value]) => {
const patternMatches = value.match(regexPattern);
// loop over all the matched strings and attach the desired flags.
if (patternMatches) {
for (let eachMatchedPattern of patternMatches) {
const startIndex = value.indexOf(eachMatchedPattern);
const endIndex = startIndex + eachMatchedPattern.length;
// save the string which doen't fall in this matched pattern range.
value = value.slice(0, startIndex) + eachMatchedPattern + passedFlags + value.slice(endIndex);
}
}
acc[key] = value;
return acc;
}, {});
packageOb.scripts = scriptsWithFlags;
}
const modifiedJSON = JSON.stringify(packageOb, null, 4);
fs.writeFileSync('./package.json', modifiedJSON);
// now run your npm start script
let cmd = 'npm';
// check if this works in your OS
if (process.platform === 'win32') {
cmd = 'npm.cmd'; // https://github.com/nodejs/node/issues/3675
}
spawn(cmd, ['run', 'start'], { stdio: 'inherit' });
} catch(e) {
console.log('Error while parsing default.package.json', e);
}
এখন, পরিবর্তে না npm run start
, আমি নাnode start-script.js --c=somethis --r=somethingElse
প্রাথমিক রানটি দেখতে দুর্দান্ত দেখাচ্ছে তবে পুরোপুরি পরীক্ষা করা হয়নি। আপনি যদি অ্যাপ্লিকেশন বিকাশ পছন্দ করেন তবে এটি ব্যবহার করুন।
yargs
; এর পরে সমস্ত পরামিতিগুলি--
আপনার স্ক্রিপ্টে পুরোপুরি পার্স করা যায়।