在Windows上的package.json中外部定位的'npm run'脚本?

时间:2014-04-21 16:05:16

标签: javascript windows node.js bash npm

众所周知,您可以使用npm runscripts添加package.json哈希来运行任意命令:

"scripts": {
    "build-js": "browserify browser/main.js | uglifyjs -mc > static/bundle.js"
}

然后使用npm run build-js运行。

您也可以将这些命令移到单独的脚本中,例如bash脚本,如下所示:

"scripts": {
    "build-js": "bin/build.sh"
}

由于Windows无法运行bash脚本,因此显然本身不能在Windows上运行。您可以安装bash端口等,但我希望能够使用某种本机Windows构造来做同样的事情。

我尝试了其他一些方法,包括使用child_process.exec从标准节点脚本文件中运行任意命令:

"scripts": {
    "build-js": "node bin/build.js"
}

但我注意到child_process窒息了相对较大/密集的操作,使其难以使用。

是否有特定于Windows(甚至更好的跨平台)方式将这些package.json npm run脚本移到单独的文件中?最好是不需要bash的那个?

3 个答案:

答案 0 :(得分:13)

从使用NPM作为构建工具的a helpful article,为什么不简单地使用JavaScript文件?

这是文章中给出的示例(为清晰起见略作修改):

// scripts/favicon.js

var favicons = require('favicons');  
var path = require('path');  

favicons({  
  source: path.resolve('../assets/images/logo.png'),
  dest: path.resolve('../dist/'),
});


// package.json

"scripts": {
  "build-favicon": "node scripts/favicon.js",
},
"devDependencies": {
  "favicons": "latest",
}

使用命令npm run build-favicon

在终端中运行

答案 1 :(得分:3)

使用node来运行JS文件是一个选项,但如果你需要在Windows和* NIX上运行系统命令,那将使脚本变得混乱。对于跨平台脚本,请试用shelljs包。

答案 2 :(得分:1)

使用make命令也是一个不错的选择。

生成文件

build-js:
    browserify browser/main.js | uglifyjs -mc > static/bundle.js

的package.json

"scripts": {
    "build-js": "make build-js",
}

您可以找到有关make here

的更多信息