语法(Windows和Linux),用于使用节点交叉ENV多个命令

问题描述 投票:1回答:1

我考虑看看有这条线在它的package.json跑噶测试项目

 "scripts": {
        "test": "NODE_ENV=test karma start karma.conf.js",

当我尝试“故宫测试”这并不工作在Windows。

我推测,这是因为这是一个* nix的语法。而且,事实上,如果我将其更改为

 "scripts": {
        "test": "set NODE_ENV=test && karma start karma.conf.js",

当我运行NPM测试测试开始。

环视,最优解似乎是使用交叉ENV包和改写它像

 "scripts": {
        "test": "cross-env NODE_ENV=test && karma start karma.conf.js",

所以我得到的交叉ENV会照顾“设置NODE_ENV”的部分在多操作系统的工作,但它的“&&”的一部分,我质疑。

难道我使用跨ENV时离开命令之间的“&&”?将在Windows和Linux的工作?

node.js linux windows command-line npm
1个回答
0
投票

你跨ENV例如将无法正常工作,它应该仅仅是:

 "scripts": {
    "test": "cross-env NODE_ENV=test karma start karma.conf.js",

没有&&。运行命令你完成设置变量后,立即来了。

我通过搜索如何设置多个变量跨env和还怎么运行多个脚本跨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

您可以通过具有运行多个命令一个额外的脚本,运行跨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
© www.soinside.com 2019 - 2024. All rights reserved.