包的脚本部分。Json当前看起来是这样的:

"scripts": {
    "start": "node ./script.js server"
}

...这意味着我可以运行npm start来启动服务器。到目前为止一切顺利。

然而,我希望能够运行类似npm start 8080的东西,并将参数传递给script.js(例如npm start 8080 => node ./script.js服务器8080)。这可能吗?


当前回答

我知道已经有了一个认可的答案,但我有点喜欢这种JSON方法。

npm start '{"PROJECT_NAME_STR":"my amazing stuff", "CRAZY_ARR":[0,7,"hungry"], "MAGICAL_NUMBER_INT": 42, "THING_BOO":true}';

通常我需要1个变量,比如项目名称,所以我发现这个快速n'简单。

我的package.json中也经常有这样的东西

"scripts": {
    "start": "NODE_ENV=development node local.js"
}

贪婪的我想要“所有的”,NODE_ENV和CMD行参数的东西。

你只需要像这样访问你的文件(在我的例子中是local。js)

console.log(process.env.NODE_ENV, starter_obj.CRAZY_ARR, starter_obj.PROJECT_NAME_STR, starter_obj.MAGICAL_NUMBER_INT, starter_obj.THING_BOO);

你只需要在它上面有这一点(我运行v10.16.0 btw)

var starter_obj = JSON.parse(JSON.parse(process.env.npm_config_argv).remain[0]);

总之,问题已经回答了。我想分享一下,因为我经常使用这种方法。

其他回答

我发现这是可能的,只是传递变量完全像你会给Node.js:

// index.js
console.log(process.env.TEST_ENV_VAR)
// package.json
...
"scripts": { "start": "node index.js" },
...
TEST_ENV_VAR=hello npm start

打印出“hello”

从npm 2开始。X,你可以通过——分隔参数传递到运行脚本

终端

npm run-script start -- --foo=3

Package.json

"start": "node ./index.js"

Index.js

console.log('process.argv', process.argv);

你要求能够运行像npm start 8080这样的程序。这是可能的,而不需要修改script.js或配置文件如下。

例如,在你的“脚本”JSON值中,包括——

"start": "node ./script.js server $PORT"

然后在命令行中:

$ PORT=8080 npm start

我已经确认这是使用bash和npm 1.4.23工作。注意,这个解决方案不需要解决GitHub npm问题#3494。

我发现这个问题,当我试图解决我的问题运行sequelize seed:generate cli命令:

node_modules/.bin/sequelize seed:generate --name=user

让我言归正传。我想在我的包中有一个简短的脚本命令。Json文件,并同时提供——name参数

经过一些实验,我们找到了答案。这是我在package.json中的命令

"scripts: {
  "seed:generate":"NODE_ENV=development node_modules/.bin/sequelize seed:generate"
}

... 下面是一个在终端中运行它为用户生成种子文件的例子

> yarn seed:generate --name=user

> npm run seed:generate -- --name=user

FYI

yarn -v
1.6.0

npm -v
5.6.0

这并没有真正回答你的问题,但你总是可以使用环境变量来代替:

"scripts": {
    "start": "PORT=3000 node server.js"
}

然后在你的server.js文件中:

var port = process.env.PORT || 3000;