我正在看一个项目,它的 package.json 中有这一行来运行 Karma 测试
"scripts": {
"test": "NODE_ENV=test karma start karma.conf.js",
当我尝试“npm test”时,这在 Windows 中不起作用。
我猜这是因为这是一个 *nix 语法。而且,事实上,如果我将其更改为
"scripts": {
"test": "set NODE_ENV=test && karma start karma.conf.js",
当我运行 npm test 时测试开始。
环顾四周,最佳解决方案似乎是使用 cross-env 包并将其重写为
"scripts": {
"test": "cross-env NODE_ENV=test && karma start karma.conf.js",
所以我得到 cross-env 将处理“设置 NODE_ENV”部分以在多个操作系统上工作,但这是我质疑的“&&”部分。
使用 cross-env 时是否在命令之间保留“&&”?这能在 Windows 和 Linux 中运行吗?
最佳答案
您的跨环境示例将不起作用,它应该只是:
"scripts": {
"test": "cross-env NODE_ENV=test karma start karma.conf.js",
没有 &&
。完成变量设置后立即运行命令。
我通过搜索如何使用 cross-env 设置多个变量以及如何使用 cross-env 运行多个脚本/命令找到了你的问题。因此,要解决问题的“多个命令”部分:
给定这两个测试脚本:
a.js
console.log('a', process.env.TEST_VAR, process.env.TEST_VAR_2);
b.js
console.log('b', process.env.TEST_VAR, process.env.TEST_VAR_2);
您会发现,如果您的 package.json 脚本中有 &&
,则后续脚本不会接收变量。例如:
"scripts": {
"check": "cross-env TEST_VAR=hello TEST_VAR_2=world node a.js && node b.js",
运行 npm run check
得到:
a hello world
b undefined undefined
你可以通过一个额外的脚本来解决这个问题,该脚本运行多个命令并使用 cross-env 运行它:
"scripts": {
"check": "cross-env TEST_VAR=hello TEST_VAR_2=world npm run check-real",
"check-real": "node a.js && node b.js",
现在 npm run check
给出:
a hello world
b hello world
关于node.js - 使用 Node cross-env 的多个命令的语法(windows 和 linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44836558/