2017-07-10 9 views
11
का उपयोग कर

यह जब एक NPM स्क्रिप्ट तर्क के रूप में उपयोग करते हुए बाहर कॉल करने के लिए yargs से एक कुंजी को पुनः प्राप्त करना संभव है?NPM स्क्रिप्ट पास मानकों/नोड स्क्रिप्ट के तर्क yargs

OSX टर्मिनल में उपयोगकर्ता प्रकार:

npm run scaffold --name=blah 

जो package.json में कार्यान्वित:

"scaffold" : "node ./scaffold/index.js -- " 

यह अगर मैं मुश्किल कोड में

const yargs = require('yargs').argv 

if (yargs) { 
    console.log(yargs); 
    console.log(yargs.name); 
    process.exit(1) 
} 
... 
result: 
{ _: [], '$0': 'scaffold/index.js' } 
undefined 

यह केवल काम करता है में परिणाम package.json "scaffold" : "node scaffold/index.js --name=blah", लेकिन मैं जरूरत यह विन्यास किया जाना है।

जैसा कि मैंने कहा मैं args का उपयोग कर रहा है, यह आसान नाम से कुंजी (के रूप में एक सरणी के खिलाफ) को पुनः प्राप्त करने करने के लिए प्रकट होता है। सुझावों के लिए खोलें।

मुझे क्या याद आ रही है?

अद्यतन 2017/11/07 संबंधित: Sending command line arguments to npm script

हालांकि, कमांडलाइन में गुजर 1: npm run scaffold name=hello या 2: npm run scaffold --name=hello पैदावार:

1: { _: [], '$0': 'scaffold/index.js' } 
2: { _: [ 'name=hello' ], '$0': 'scaffold/index.js' } 

फिर भी yargs.name संपत्ति को पुनः प्राप्त करने के लिए एक रास्ता नहीं देख सकते हैं । अभी भी अपरिभाषित


अद्यतन 13-07-2017

समय के लिए किया जा रहा है, मैं छोड़ दिया है। यह बस असंभव प्रतीत होता है। मैं टर्मिनल में मैन्युअल रूप से स्क्रिप्ट चलाता हूं। ईजी।

node ./scaffold/index.js --name=blah 

सीधे एक नोड स्क्रिप्ट के क्रियान्वित करने के रूप में NPM स्क्रिप्ट के माध्यम से चल करने का विरोध शो नीचे छवि। मैं (यह नहीं है) अगर यह मदद करता है देखने के लिए https://www.npmjs.com/package/nopt नोड मॉड्यूल जोड़ लिया है। process.argv.name अभी भी अपरिभाषित जब NPM स्क्रिप्ट के माध्यम से चल रहा है।

enter image description here


अद्यतन 18-07-2017

जोड़ा गया GitHub उदाहरण: https://github.com/sidouglas/stackoverflow-node-arguments


अद्यतन 24-07-2017

से पहले आदेश के शुरू होने से काम करता है myvar="hello npm run scaffold रूप npm run scaffold myvar="hello world"

उत्तर

4

मुझे यकीन है कि यह महत्वपूर्ण है जहां से चर कमांड लाइन पर जोड़ रहे हैं नहीं कर रहा हूँ, और यह अगर आप के लिए कोई चिंता का विषय है, तो यह काम करता है:

//package.json 
{ 
    "name": "npm-test", 
    "version": "1.0.0", 
    "description": "", 
    "main": "index.js", 
    "dependencies": {}, 
    "devDependencies": {}, 
    "scripts": { 
    "start": "node index.js" 
    }, 
    "author": "", 
    "license": "ISC" 
}  

आपका जे एस फ़ाइल:

//index.js 
console.log('myvar', process.env.myvar);  

और अपने आदेश पंक्ति आदेश:

myvar="hello world" npm run start  

तो अंत में, बस अपने NPM स्क्रिप्ट आदेश अपने तर्क सूची के साथ लगा दें।

+0

बहुत रोचक। कमांड काम शुरू करने के लिए चर जोड़ना। अंत में, यह विफल रहता है। आपके उत्तर के लिए धन्यवाद – Simon

+0

खुशी है कि आपने इसे समझ लिया है। बदलावों के साथ बस आपके उदाहरण रेपो में एक नई शाखा को दबा रहा था और जिथब सहयोग नहीं कर रहा था। – Chase

3

करने का विरोध किया [email protected] के रूप में, आप कस्टम तर्क जब स्क्रिप्ट का निष्पादन उपयोग कर सकते हैं चर जोड़ना। विशेष विकल्प - विकल्पों के अंत को सीमित करने के लिए गेटोपेट द्वारा उपयोग किया जाता है।NPM के बाद सभी तर्क पारित करेंगे - अपनी स्क्रिप्ट के लिए सीधे:

npm run test -- --grep="pattern"

https://docs.npmjs.com/cli/run-script

+0

यह उत्तर पूरा नहीं हुआ है। मैं इस पृष्ठ पर गया हूं, और कई बार पढ़ा, और फिर से पढ़ा। उदाहरण जो आपने कॉपी और पेस्ट किया है। मेरे उदाहरण में, यदि मैं आपके 'process.argv' को console.log को जोड़ता हूं, तो मैं * अभी भी * आपके उत्तर उदाहरण में process.argv पर 'नाम' विशेषता को पुनर्प्राप्त करने के साधन नहीं देखता हूं, न ही आपके 'grep'argument। – Simon

+0

यदि आप अपने कोड (package.json, index.js, आदि) के साथ एक सार्वजनिक गिटहब भंडार बना सकते हैं तो मैं इसे आजमा सकता हूं और डीबग कर सकता हूं। – sabrehagen

+0

भंडार जोड़ा गया। (https://github.com/sidouglas/stackoverflow-node-arguments) – Simon

संबंधित मुद्दे