node.js - 使用 Node cross-env 的多个命令的语法(windows 和 linux)

标签 node.js linux windows command-line npm

我正在看一个项目,它的 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/

相关文章:

linux - 使 : g: No such file or directory make: *** No rule to make target `g' . 停止

linux - 在 shell 变量中提取文件的最后一个和倒数第二个字符串

linux - 为 Linux 构建的 NSIS unicode

linux - 在 Windows 上为 Linux 编程

javascript - Discord Bot 未接收交互

javascript - 为什么我无法在 JavaScript 中通过键访问 JSON 对象?

windows - v8_base.lib(作为 node.js 的一部分编译)是 huuuuge。为什么?

windows - 文件存在和不存在的奇怪情况

node.js - 如何将 ExpressJS 服务器与 Angular2 集成

javascript - 使用 Cheerio 进行网页抓取 : Deleting or ignoring a child element?