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

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

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

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


当前回答

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

终端

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

Package.json

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

Index.js

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

其他回答

当我需要部署到不同的环境时,我也遇到了同样的问题 这是包裹。Json预发布更新。

 scripts:
{"deploy-sit": "sls deploy --config resources-sit.yml",
 "deploy-uat": "sls deploy --config resources-uat.yml",
 "deploy-dev": "sls deploy --config resources-dev.yml"}

但这里是采用环境变量而不是重复自己的正确方法

scripts:{"deploy-env": "sls deploy --config resources-$ENV_VAR.yml"}

最后,您可以通过运行进行部署 ENV_VAR=dev npm运行deploy-env

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

使用方便。安装方便。跨所有平台。

例子:

为命令设置参数

// package.json
"scripts": {
  “test”: “node test.js”,
  “test-with-env-arg”: “cross-env YourEnvVarName=strValue yarn test,
}

从process.env中获取参数

// test.js
const getCommandLineArg = Boolean(process.env.YourEnvVarName === 'true')  // Attention: value of process.env.* is String type, not number || boolean

jakub。G的答案是正确的,但是使用grunt的例子似乎有点复杂。

所以我的简单回答是:

-向npm脚本发送命令行参数

发送命令行参数到npm脚本的语法:

npm run [command] [-- <args>]

假设我们的包中有一个npm start任务。Json启动webpack开发服务器:

"scripts": {
  "start": "webpack-dev-server --port 5000"
},

我们用npm start从命令行运行它

现在,如果我们想把一个端口传递给npm脚本:

"scripts": {
  "start": "webpack-dev-server --port process.env.port || 8080"
},

运行该命令并通过命令行传递端口,例如5000,如下所示:

npm start --port:5000

-使用包。json配置:

正如jakub提到的。G,你也可以在package.json的配置中设置参数

"config": {
  "myPort": "5000"
}

"scripts": {
  "start": "webpack-dev-server --port process.env.npm_package_config_myPort || 8080"
},

NPM start将使用配置中指定的端口,或者你也可以覆盖它

npm config set myPackage:myPort 3000

-在npm脚本中设置参数

读取npm脚本中设置的变量的例子。在本例中NODE_ENV

"scripts": {
  "start:prod": "NODE_ENV=prod node server.js",
  "start:dev": "NODE_ENV=dev node server.js"
},

通过prod或dev读取server.js中的NODE_ENV

var env = process.env.NODE_ENV || 'prod'

if(env === 'dev'){
    var app = require("./serverDev.js");
} else {
    var app = require("./serverProd.js");
}

使用过程。Argv在你的代码中,然后只提供一个尾随$*到你的脚本值项。

作为一个例子,尝试用一个简单的脚本,只记录提供的参数到标准的echoargs.js:

console.log('arguments: ' + process.argv.slice(2));

package.json:

"scripts": {
    "start": "node echoargs.js $*"
}

例子:

> npm start 1 2 3
arguments: 1,2,3

的过程。[0]是可执行(节点)进程。Argv[1]是你的脚本。

在npm v5.3.0和node v8.4.0中测试