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

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

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

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


当前回答

基本上这是传递命令行参数的方式,但它只在脚本只有一个命令运行的情况下才会工作,就像我正在运行一个命令,即npm run start——4200

"script":{
       "start" : "ng serve --port="
 }

这将在传递命令行参数时运行,但如果我们一起运行多个命令,比如npm run build c:/workspace/file

"script":{
       "build" : "copy c:/file <arg> && ng build"
 } 

但是当运行copy c:/file && ng build c:/work space/file时,它会这样解释 我们期待的是这样的事情 复制c:/file c:/work space/file && ng build

注意:-所以命令行参数只能在脚本中只有一个命令的情况下工作。

我读了上面的一些答案,其中一些人写着你可以使用$ symbol访问命令行参数,但这将不起作用

其他回答

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

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

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

然后在命令行中:

$ PORT=8080 npm start

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

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

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

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

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

我发现这个问题,当我试图解决我的问题运行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

我发现这是可能的,只是传递变量完全像你会给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”

你也可以这样做:

在package.json:

"scripts": {
    "cool": "./cool.js"
}

在cool.js:

 console.log({ myVar: process.env.npm_config_myVar });

在CLI:

npm --myVar=something run-script cool

应该输出:

{ myVar: 'something' }

更新:在使用npm 3.10.3时,它看起来降低了process.env的大小写。npm_config_变量?我还使用了better-npm-run,所以我不确定这是否是普通的默认行为,但这个答案是有效的。而不是process.env。npm_config_myVar,尝试process.env.npm_config_myvar