我想运行一个 sh
脚本,通过 npm 脚本
检测我的 npm
版本。
我有以下脚本,它运行得很酷:
if [ $(npm -v | cut -c 1 | awk '{print $1\"<3\"}' | bc -l) != 0 ]; then echo '[ERROR] You need npm version @>=3\n' && false; fi
但是这个脚本只能在 *NIX 上运行,当我在 Windows 上运行脚本时出现错误:
$(npm此时出乎意料。
我想检测我是否在 Windows 上运行脚本,然后不执行该脚本,我尝试过这个,但同样只适用于 *NIX:
if [ 'uname -s' != CYGWIN* ]; then if [ $(npm -v | cut -c 1 | awk '{print $1\"<3\"}' | bc -l) != 0 ]; then echo '[ERROR] You need npm version @>=3\n' && false; fi; fi
然后我得到:
'uname 此时出现意外。
我正在检查 Windows 上 uname
的等效项是 systeminfo
但是如果我使用systeminfo
,那么我会在 *NIX 上得到未定义的信息。
关于如何使该脚本在 Windows && *NIX 上运行有什么想法吗?
最佳答案
如果您想在非 Windows 平台上执行 bash 脚本,您可以使用 os.platform()
检查 Node 本身的平台(假设已安装 Node )
scripts: {
checkNpmVersion: "node -e \"process.exit(require('os').platform() === 'win32')\" && ./check-npm.sh"
}
或者更好的是,您可以在 Node 中编写小脚本,以便它可以在任何平台上运行(再次假设已安装 Node )
// check-npm.js
const exec = require('child_process').exec
exec('npm -v', function (err, stdout, stderr) {
if (err) throw err
if (stdout.match(/^3/)) throw "npm>3 required"
})
在脚本字段中
scripts: {
checkNpmVersion: "node check-npm.js"
}
在 Win7 上使用 Node v4.4.5 和 npm 2.15.5 进行测试
关于node.js - 如何在 Windows 和 Unix 上运行 npm sh 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37505649/