npm скрипт передает параметры/аргументы сценарию узла с использованием yargs
Можно ли запросить извлечение ключа из yargs при использовании в качестве аргумента сценария npm?
Типы пользователей в терминале 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
Это работает только в том случае, если я жестко "scaffold": "node scaffold/index.js --name=blah"
в package.json "scaffold": "node scaffold/index.js --name=blah"
, но мне нужно, чтобы это настраивалось.
Как я уже сказал, я использую args, поскольку он, как представляется, упрощает извлечение ключей по имени (в отличие от массива). Открыта для предложений.
Что мне не хватает?
update 11-07-2017 Связано: Отправка аргументов командной строки в сценарий npm
Тем не менее, прохождение в командной строке 1: npm run scaffold name=hello
OR 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.
Обновление 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"
Ответы
Ответ 1
Я не уверен, что это важно, когда переменные добавляются в командной строке, и если это вас не касается, то это работает:
//package.json
{
"name": "npm-test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {},
"devDependencies": {},
"scripts": {
"start": "node index.js"
},
"author": "",
"license": "ISC"
}
Ваш JS файл:
//index.js
console.log('myvar', process.env.myvar);
И ваша команда командной строки:
myvar="hello world" npm run start
Поэтому, в конце концов, просто префикс вашей команды npm script с вашим списком аргументов.
Ответ 2
Начиная с [email protected], вы можете использовать собственные аргументы при выполнении скриптов. Специальный параметр - используется getopt для разграничения конца опций. npm передаст все аргументы после - непосредственно к вашему скрипту:
npm run test -- --grep="pattern"
https://docs.npmjs.com/cli/run-script