用npm-run实现自动化任务的方法示例
自动构建javascript有不少。不过其实很少有人知道,npm run
命令就能很好地完成这一任务,配置起来也很简单。
James Halliday在博客上分享了使用npm run
自动化任务的一些经验
script
会在项目的 package.json
文件中寻找 scripts
区域,其中包括npm test
和npm start
等命令。
其实npm test
和npm start
是npm run test
和npm run start
的简写。事实上,你可以使用npm run
来运行scripts
里的任何条目。
使用npm run
的方便之处在于,npm会自动把node_modules/.bin
加入$PATH
,这样你可以直接运行依赖程序和开发依赖程序,不用全局安装了。只要npm上的包提供命令行接口,你就可以直接使用它们,方便吧?,你总是可以自己写一个简单的小程序。
构建javascript
为了便于组织代码和利用npm上的包,写代码的时候往往使用module.exports
和require()
。browserify可以将这些一起打包成单一的脚本。使用browserify很简单,只需在package.json
中加入一个['build-js']
条目,类似这样
"build-js": "browserify browser/main.js > static/bundle.js"
如果是用于生产环境,还需要压缩一下。我们只需要将uglify-js
加入devDependency,然后直接通过管道传递一下即可
"build-js": "browserify browser/main.js | uglifyjs -mc > static/bundle.js"
监视 javascript
为了能在修改文件之后自动重新生成javascript文件,只需将上面的命令换成watchify并加上一些参数。
"watch-js": "watchify browser/main.js -o static/bundle.js -dv"
这里加了-d
和-v
两个参数,这样就可以看到详细的调试信息。
构建CSS
用cat
就可以搞定
"build-css": "cat static/pages/.css tabs//.css > static/bundle.css"
监视CSS
和上面用 watchify 监视 javascript 类似,我们用catw监视CSS文件的改动
"watch-css": "catw static/pages/.css tabs//.css -o static/bundle.css -v"
序列化子任务
很简单,npm run
每个子任务,然后用&&
连接起来就成。
"build": "npm run build-js && npm run build-css"
并行子任务
类似地,我们用&
并行子任务
"watch": "npm run watch-js & npm run watch-css"
完整的package.json例子
将上面提到的内容组合起来,package.json
大致就是这个样子
{ "name": "my-silly-app", "version": "1.2.3", "private": true, "dependencies": { "browserify": "~2.35.2", "uglifyjs": "~2.3.6" }, "devDependencies": { "watchify": "~0.1.0", "catw": "~0.0.1", "tap": "~0.4.4" }, "scripts": { "build-js": "browserify browser/main.js | uglifyjs -mc > static/bundle.js", "build-css": "cat static/pages/.css tabs//.css", "build": "npm run build-js && npm run build-css", "watch-js": "watchify browser/main.js -o static/bundle.js -dv", "watch-css": "catw static/pages/.css tabs//.css -o static/bundle.css -v", "watch": "npm run watch-js & npm run watch-css", "start": "node server.js", "test": "tap test/.js" } }
生产环境下,只需运行npm run build
。如果是本地开发,就用npm run watch
。
你也可以坐下扩展。比方说,如果你希望在运行start
前先运行build
,那么你只需写上这么一行
"start": "npm run build && node server.js"
也许你想启动watcher?
"start-dev": "npm run watch & npm start"
当事情变得非常复杂的时候
如果你发现在单个scripts
条目中塞了一大堆命令,那你可以考虑重构一下,把一些命令放到别的地方,比如/bin
。
你可以用任何语言编写这个脚本,比如bash
、node
或perl
。只需要在脚本上加上合适的#!
行。还有,别忘了chmod +x
。
#!/bin/bash (cd site/main; browserify browser/main.js | uglifyjs -mc > static/bundle.js) (cd site/xyz; browserify browser.js > static/bundle.js)
"build-js": "bin/build.sh"
Windows
你可能会吃惊的是,相当多的类bash语法可以在Windows上工作。不过我们至少还需要让;
和&
可以正常工作。
James Halliday分享过一些在Windows兼容的经验,这些经验也适用于本文的主题,可以参考。要推荐下win-bash,这是一个很方便的Windows平台上的bash实现。
James Halliday希望这个使用npm run
的方式能吸引一部人对现有的前端自动化任务工具不满意的人。James Halliday比较偏好unix体系下的那些学习曲线陡峭的工具,比如git
,或者类似 npm 这种在 bash 的基础上提供极简界面的工具。也就是说,不需要很多仪式化操作和配合的工具。非常简单的工具,已经足够胜任通常的任务。
如果你对npm run
风格不感冒。你也许可以考虑下Makefiles
,一个稳定而简单,不过多少有点怪异的替代品。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
编程语言
- 甘肃哪有关键词排名优化购买方式有哪些
- 甘肃SEO如何做网站优化
- 河南seo关键词优化怎么做电话营销
- 北京SEO优化如何做QQ群营销
- 来宾百度关键词排名:提升您网站曝光率的关键
- 卢龙关键词优化:提升您网站排名的策略与技巧
- 山东网站优化的注意事项有哪些
- 四川整站优化怎样提升在搜索引擎中的排名
- 疏附整站优化:提升网站性能与用户体验的全新
- 海南seo主要做什么工作售后服务要做到哪些
- 荣昌百度网站优化:提升您网站的搜索引擎排名
- 河北seo网站排名关键词优化如何做SEO
- 江西优化关键词排名推广售后保障一般有哪些
- 古浪SEO优化:提升你的网站可见性
- 西藏网站排名优化怎么把网站排名在百度首页
- 如何提升阳东百度快照排名:详尽指南