前些天看到一篇不错的文章 http://blog.keithcirkel.co.uk/why-we-should-stop-using-grunt/
作者的观点是前端程序员不应该使用Grunt和Gulp这样的工具,可能观点听起来有点不可思议,不过他说的一些理由还是很有道理的。
作者主要列举了如下几个理由:
- 代码变得更加臃肿。和npm中配置script相比,grunt和gulp的配置文件简直臃肿不堪
- 插件依赖。比如在grunt中用
browserify
会需要grunt-browserify
插件,而其实这个插件就是对browserify
插件做了一个简单的包装,但是如果你需要的插件没有grunt版本就会很麻烦 - 升级问题。比如 Grunt 从 0.3 升级到 0.4 的时候会需要 修改配置文件。
- 兼容问题。比如 Gulp 中的插件
gulp-uglify
其实是不支持stream
的,因此无法直接使用
作者写文章是在2014年,所以没有提到 webpack。不过上面的几个问题现在为止都还是是存在的。作者的解决方法就是通过 npm 脚本来编译代码,也就是 package.json
里面的 scripts
配置项。
对此我认为作者的观点确实有些极端。Grunt和Gulp存在的意义是,他可以编写复杂的项目构建脚本。特别是 Gulp,可以通过 JS 代码进行一些精细的定制。不过至少给我们一个很大的启发:简单的项目构建完全可以通过几行 npm 配置来解决。
很多项目其实构建起来比较简单,只要简单的打包编译JS和CSS就行了, npm
本来就提供了一个 scripts
配置,很多时候完全可以通过几个npm简单的命令就可以,完全用不着Grunt和Gulp。
比如我最近用JS写一个五子棋的AI程序,我的项目中就没有用Grunt或者Gulp,而是直接写了几行 npm 配置就搞定:
"watch": {
"less": "less/main.less",
"js": "js/*.js"
},
"scripts": {
"less": "lessc less/main.less > dist/main.css",
"js": "browserify js/main.js > dist/main.js && browserify js/computer.js > dist/computer.js",
"watch": "npm-watch",
"test": "mocha tests/*.js"
},
编译 less 和 js ,单元测试,watch 模式都有,而且就是简单的几行配置就搞定了。有兴趣的童鞋可以在这里看项目的源码:https://github.com/lihongxun945/gobang
总结下我的观点是:对于动辄200行以上复杂配置,还需要各种定制的项目来说,推荐使用 Gulp。 对于像我上面提到的那么简单的配置的项目,推荐通过 npm 脚本来实现。
很多技术都像一个金字塔,顶层的各种新潮的技术很多都是依赖下一层的,看起来不那么潮甚至有些土的技术,而顶层的新技术往往两三年就被淘汰殆尽,底层的老掉牙的技术却一直坚挺的存在。
所以Gulp Webpack之类的东西我们还是要学要用,但是如果连一个npm脚本都不会写,那么自己的技术就像一个根基不稳的高楼一样摇摇欲坠。