将NPM脚本中的标准输出添加到变量中

时间:2017-04-07 17:21:34

标签: node.js bash npm sass npm-scripts

我有这个节点脚本解析.YAML并输出名为 version

的字段
node node/getAssetsVersion.js
=> "2.1.2"

我试图将 stdout 转换为变量并在NPM脚本中使用

这是我在 package.json 中尝试做的事情:

"scripts": {
   "build": "cross-env VERSION=\"$(node node/getAssetsVersion.js)\" \"node-sass --include-path scss src/main.scss dist/$VERSION/main.css\""
}

谢谢!

1 个答案:

答案 0 :(得分:1)

而不是:

VERSION=\"$(node node/getAssetsVersion.js)\" 

您可能需要使用:

VERSION=\"$(node node/getAssetsVersion.js | cut -d'\"' -f2)\"

如果程序的输出是你在问题中写的那样:

=> "2.1.2"

如果只是这样:

"2.1.2"

然后上面的代码仍然有效,但您可以使用更简单的命令:

VERSION=$(node node/getAssetsVersion.js)

没有引号。

但在后期,$VERSION可能不会像你期望的那样被替换。

由于您使用bash标记了问题,我建议您编写一个Bash脚本:

#!/bin/bash
VERSION=$(node node/getAssetsVersion.js | cut -d'\"' -f2)
node-sass --include-path scss src/main.scss dist/$VERSION/main.css

或:

#!/bin/bash
VERSION=$(node node/getAssetsVersion.js)
node-sass --include-path scss src/main.scss dist/$VERSION/main.css

取决于getAssetsVersion.js的输出是什么,并将其放在package.json中:

"scripts": {
   "build": "bash your-bash-script-name"
}

我会避免任何多次转义的报价。