Grunt 和 Bower 在寒假时候我看过, 那些天晚上村里还舞龙灯
Bower 因为我倾向 Browserify 阵营, 心理上有点排斥, 毕竟麻烦很多
我的立场是代码应该方便抽象, 第 N 次面对同一个问题时应该直接用现成方案
只是 CSS 和 HTML 缺乏抽象, JS 能做了, 页面未必能做
还有我个人因为是用代码来展示想法, 避免重复就很必要, 公司代码大概不一样
不过由于公司用到 Grunt, 我拖时间再学习了下 Grunt 的细节
前端代码现在的状态, 就是一种不方便抽像的代码, 有点像汇编
调试的时候要每个元素看, CSS 调试要每个节点手动对付选择器和颜色
JS 编码过程手动绑定事件, 进行原生的 DOM 操作等等琐碎的内容
但编程最想要的是问题只被解决一次, 或者是第 N 次能用前面解决的方案
Shadow DOM 和 Web Components 的规划是必需的, 否则就是底层
像 Angular 就通过代码来生成 DOM, 精彩地实现了抽象的功能
前些天看到 Components 这个 Github 主页, 看了半天才看懂
这个 Organization 的维护者有 Google 和 Twitter 的 JS 大神
而且和 Bower 关系密切, 急的 Paul Irish 有个演讲说..
Yeoman 封装了各种 Google 认为的 Best practives, 其中包括 Bower
可我觉得 Bower 还是没解决多大问题嘛, 只是解决了第一步..
one-page 的仓库在 Github 上, 可以直接 git clone
套用
具体在 README 里我写了, 比较初级的英文, 熟悉 Git 和 NPM 就不难
我个人的习惯吧, 使用 CoffeeScript, Stylus, Jade 来写代码:
➤➤ tree -I node_modules
.
├── Gruntfile.coffee
├── README.md
├── build
│ ├── bundle.js
│ ├── index.html
│ └── layout.css
├── coffee
│ ├── main.coffee
│ └── utils.coffee
├── jade
│ ├── head.jade
│ └── index.jade
├── package.json
└── stylus
├── layout.styl
└── set-body.styl
主要从下面几个方面进行了考虑:
grunt-contrib-watch
和 LiveReload 插件完成了自动刷新的步骤include
来加载模块的局部代码, 进行抽象@import
来完成 CSS 的文件拆分, 虽然漏洞颇多以前的命令行都是自身实现的 Watch 极致的, 比如 Browserify 也有
另外对 Jade 也有, 但如果是多个文件, Grunt Task 写法就导致多余的重新编译
现在我强制 Stylus Jade 编译到单一的结果, 刷新次数就对了
现在开发前端不用频繁刷新怎么写啊.. 编辑器功能这么贫乏的年代
类库我没具体考虑过, JS 用 Browserify 自己改一下问题不大
如果引入第三方的模块, 现在只能接受手动逐个引入资源文件了
就搞不明白浏览器为什么不提供基于模块的缓存, 其他语言很多呀
以后学 Angular 也许有好一些的方案, 希望真的有...
发现 Jade 可以用来做 pre-compile 的模版引擎, 觉得坑少多了
不过 Jade 还是有些问题, pre-compile 不是现成的, Grunt 插件倒是可以
pre-compile 以后速度块很多, 具体我写的测试不够详细不确定
另外 Jade 的文档最近有翻修过, 过段时间可能又要人翻译中文.. 忙呃逃了
之前我写过两个模块用来给自己的项目做自动编译之类事情的
一个是 calabash, 用 CoffeeScript 语法写 Bash 命令后台跑的
一个是 doodle 做监视文件自动刷新页面的事情
昨天一试发现 Grunt 上直接来也不是很难用, 谁让用 Grunt 的人多呢
Grunt 主要写法和 Node 风格有差异让我不爽, 但用起来其实也问题不大
晚上微博上看还有中文 Grunt 文档, 佩服了: http://www.gruntjs.org/
Grunt 提供的路径展开功能非常实用, 也符合我对这样一个工具的期望
只是, Node 模块使用, exports
书写, 子进程等一定程度被弄乱了不好
我用到的几个链接贴在这里吧, 也许有用:
http://gruntjs.com/getting-started
https://github.com/gruntjs/grunt/wiki/Sample-Gruntfile
https://github.com/gruntjs/grunt-contrib-jade
https://github.com/gruntjs/grunt-contrib-watch
https://github.com/gruntjs/grunt-contrib-stylus
https://github.com/jmreidy/grunt-browserify
https://github.com/visionmedia/jade/blob/master/jade-language.md