使用 cross-env 将命令行参数传递给 NPM 脚本

4

我有一个简单的应用程序,通过npm script调用。脚本会做两件事情。首先,它会设置NODE_ENV环境变量。其次,它会调用node index.js

我希望NODE_ENV的值可以通过命令行参数进行配置,因此我想要类似以下的功能:

"scripts": {
    "test:integration": "cross-env NODE_ENV=%env% node index.js"
}

那么我可以这样从命令行调用它:

npm run test:integration --env=dev-integration

根据我所阅读的,鉴于NPM内置了一种传递命令行参数到脚本的方式,这应该是可行的。这个 Stack Overflow 的答案详细介绍了它:https://dev59.com/HlUK5IYBdhLWcg3wuB54#64694166
然而,我无法让它正常工作。当我运行时,我会得到以下错误:
> cross-env NODE_ENV=%env% node index.js

WARNING: NODE_ENV value of '%env%' did not match any deployment config file names.
WARNING: See https://github.com/lorenwest/node-config/wiki/Strict-Mode
%env%

我发现 %env% 参数没有解析为传入的值。我在 Windows 上,但我需要它也能在 Linux 上工作,所以我想使用 cross-env,但它不行。我在 Windows 上也无法使其工作。

你有什么想法可以让这个工作吗?


考虑以下不需要任何依赖项的解决方案:1) 重新定义您的npm脚本为 "test:integration": "node -e \"const env = process.env; env.NODE_ENV = process.env.npm_config_env; require('child_process').execSync('node ./index.js', {env: env, stdio: 'inherit'});\"" 2) 运行以下命令:npm run test:integration --env=dev-integration - RobC
1个回答

0
上面评论中提供的答案是正确的,即由@RobC提供的答案。通过对语法进行一些小调整,我能够从命令行界面获取环境变量。感谢@RobC,非常感谢您的帮助...
以下是我用于从cli获取ENV值的代码的参考:
"test": "ts-node -e \\"const env = process.env; env.ENV = process.env.npm_config_env; require('child_process').execSync('npx wdio ./src/main/config/wdio.conf.ts', {env: env, stdio: 'inherit'});\\""

使用以下命令运行:

npm run test --env=test.

注意:我正在使用ts-node和执行WebdriverIO脚本。
敬礼, Suraj Mishra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接