node.js - 如何在 Windows 和 Unix 上运行 npm sh 脚本

标签 node.js bash batch-file npm

我想运行一个 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/

相关文章:

node.js - headless Chrome 屏幕截图的最大高度为 16,384 像素?

node.js - Angular 通用服务器端渲染 (SSR) res.render 未加载

node.js - 如何在 NodeJS 中创建动态下拉菜单?

bash - 当存在空字符且使用 -z 选项时,Grep 不起作用

audio - 使用 lame 将 wav 的所有子文件夹和文件批量转换为 mp3

windows - 用于替换多个文件中特定字符串的批处理脚本

javascript - Gulp 似乎可以正常工作,但尚未处理构建文件

bash - 如何在 Bash 中更改全局背景颜色

regex - 如何在 perl 替换中转义 REPLACEMENT?

batch-file - 如何调用从当前目录向上一级的批处理文件?