OS X, Linux

$ PORT=3000 roadhog server

Windows (cmd.exe)

$ set PORT=3000&&roadhog server

Or use cross-env for all platforms

$ cross-env PORT=3000 roadhog server

执行npm completion可以得到一个npm的命令自动补全脚本

管道

假设我们要用browserify打包javascript文件,并且要用uglifyjs进行代码混淆。我只需要用管道(|)把browserify的输出转接给uglifyjs就可以了。

// package.json
// browserify的reactify选项用于处理React语法
"scripts": {
  "build-js": "browserify -t reactify app/js/main.js | uglifyjs -mc > static/bundle.js"
},

串行

另一个场景是我们希望当且仅当上一个命令完成后,再执行下一个命令。可以通过串行符号(&&)来实现这个功能,当然,管道(|)也可以实现类似的效果

"scripts": {
  // 如果build-js,则继续执行build-less
  "build": "npm run build-js && npm run build-less",
  ...
  "build-js": "browserify -t reactify app/js/main.js | uglifyjs -mc > static/bundle.js",
  "build-less": "lessc app/less/main.less static/main.css"
}

如果脚本是开始一个常开的服务,因为上一个命令一直没有结束,所以如果用串行命令,&&后面的命令不会执行

并行

有时候并行地执行多个命令的功能也是必要的。使用并行符号(&)可以把子命令作为后台任务并行执行。

"scripts": {
  // 并行地执行watch-js,watch-less和watch-server
  "watch": "npm run watch-js & npm run watch-less & npm run watch-server",
  "watch-js": "watchify app/js/main.js -t reactify -o static/bundle.js -dv",
  "watch-less": "nodemon --watch app/less/*.less --ext less --exec 'npm run build-less'",
  "watch-server": "nodemon --ignore app --ignore static server.js"
},

木木俞
192 声望5 粉丝

佛系前端