Skip to content

Commit 29a214e

Browse files
committed
Merge pull request spmjs#1 from twinstony/master
build with grunt
2 parents 3da734f + 3fa2432 commit 29a214e

File tree

1 file changed

+202
-0
lines changed

1 file changed

+202
-0
lines changed

docs/contrib/simple-grunt.md

Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
#关于Grunt,从一个简单的配置开始!
2+
- pubdate: 2013-04-18 15:09
3+
---
4+
`author: twinstony`
5+
6+
玩儿转grunt,需要了解的知识稍微多一点,这里仅以一个简单的配置介绍grunt,希望能让你尽快的认识她。
7+
8+
进一步的了解,请移步官网:[Grunt](http://gruntjs.com/ "Grunt")
9+
10+
## 简介
11+
Q:Grunt为何物?
12+
13+
A:一个专为JavaScript提供的构建工具。
14+
15+
Q:啥是构建工具?
16+
17+
A:在项目部署上线前,通常要将源文件压缩,合并,并拷贝到bch或trunk中。
18+
在将js模块化后,又多了一个分析,提取业务代码中所依赖模块的工作。
19+
解决这一系列繁重工作的自动化工具,称之为构建工具。
20+
21+
Q:grunt是如何工作的?
22+
23+
A:刚刚接触grunt,举个例子可能不太恰当,但应该可以让你先比较准确的认识她。
24+
就好像一个万能工厂(grunt),只负责执行任务(Task),不关心每个任务到底都干了什么。
25+
这些任务比如:
26+
27+
* clean:删除临时文件
28+
29+
* uglify:压缩
30+
31+
* qunit:测试
32+
33+
* concat:合并
34+
35+
任务流程可能是这样的:
36+
37+
* task:clean
38+
39+
* task:uglify
40+
41+
* task:qunit
42+
43+
* task:concat
44+
45+
## 安装
46+
47+
前提是你已经安装了`nodejs``npm`。 你可以在 [nodejs.org](http://nodejs.org/) 下载安装包安装,也可以通过包管理器(比如在 Mac 上用 homebrew,同时推荐在 Mac 上用 homebrew)。
48+
49+
**安装grunt CLI**
50+
51+
```
52+
npm install -g grunt-cli
53+
```
54+
55+
按照官方的说法,`grunt-cli`只是为了在同一台机器上安装不同的`grunt`版本,那么咱们先不去管他。
56+
57+
**在项目中使用grunt**
58+
59+
首先需要往项目里添加两个文件:`package.json``Gruntfile.js`
60+
61+
* package.json:该文件用来为npm存放项目配置的元数据,与grunt关系最大的配置在devDependencies中。
62+
63+
```
64+
"devDependencies": {
65+
"grunt": "~0.4.1",
66+
"grunt-cmd-transport": "~0.2.0",
67+
"grunt-cmd-concat": "~0.2.0",
68+
"grunt-contrib-uglify": "~0.2.0",
69+
"grunt-contrib-clean": "~0.4.0"
70+
}
71+
```
72+
73+
* Gruntfile.js:注意G的大写,这个文件就是`grunt`的配置了,其中详细定义了每个任务的细节和执行任务的顺序等。
74+
75+
**安装grunt**
76+
77+
在命令行进入项目所在目录,键入如下命令即可,`npm`会根据`devDependencies`中的配置,将需要的`grunt`及其插件下载到你的项目目录中。
78+
79+
```
80+
npm install grunt --save-dev
81+
```
82+
83+
84+
## 传说中简单的配置T-T
85+
86+
终于到了简单配置环节,就从`Gruntfile.js`入手,一点点的认识`grunt`
87+
88+
一个几乎是`Gruntfile.js`通用的写法:
89+
90+
```
91+
module.exports = function(grunt) {
92+
grunt.initConfig({
93+
pkg: grunt.file.readJSON('package.json');
94+
});
95+
};
96+
```
97+
98+
由于篇幅关系,这里只简单说下。`grunt`配置的主体都在`grunt.initConfig`
99+
100+
`pkg: grunt.file.readJSON('package.json')`是为了以后在其它任务(task)中方便读取`package.json`已经定义好的值。
101+
102+
下面我们来了解下任务(task):
103+
104+
```
105+
transport: {
106+
dialog: {
107+
files : [
108+
{
109+
src : '*',
110+
dest : '.build/styles/component/dialog/src'
111+
}
112+
]
113+
}
114+
}
115+
```
116+
117+
`transport`就是一个任务(task),她是这次`spm2`所提供的一系列`grunt`构建插件的其中一个,该插件主要负责提取模块中的依赖,
118+
并为每个模块设置`模块ID``dialog`是任务的其中一个目标(Target),`files`中定义了要对哪些文件执行该任务(src),
119+
以及执行任务后,生成的文件放在什么地方(dest)。
120+
121+
下一个任务是合并(concat):
122+
123+
```
124+
concat: {
125+
dialog: {
126+
files: {
127+
"dist/styles/component/dialog/src/dialog.js": [".build/styles/component/dialog/src/dialog.js"]
128+
}
129+
}
130+
}
131+
```
132+
133+
`concat`的内容是合并依赖的模块,有很多需要设置的地方,因为本文档目的只是介绍`grunt`
134+
所以这里简单说,该配置采用了另外一种`src``dest`的写法。相信大家只要理解了任务(task)和目标(target)后应该很好理解。
135+
136+
最后,加载`grunt`需要的插件:
137+
138+
```
139+
grunt.loadNpmTasks('grunt-cmd-transport');
140+
grunt.loadNpmTasks('grunt-cmd-concat');
141+
```
142+
143+
还要告诉grunt该怎么执行这些任务:
144+
145+
```
146+
grunt.registerTask('build', ['transport', 'concat']);
147+
```
148+
149+
完整的`Gruntfile.js`
150+
151+
```
152+
module.exports = function(grunt) {
153+
grunt.initConfig({
154+
pkg: grunt.file.readJSON('package.json'),
155+
156+
transport: {
157+
dialog: {
158+
files : [
159+
{
160+
src : '*',
161+
dest : '.build/styles/component/dialog/src'
162+
}
163+
]
164+
}
165+
},
166+
concat: {
167+
dialog: {
168+
files: {
169+
"dist/styles/component/dialog/src/dialog.js": [".build/styles/component/dialog/src/dialog.js"]
170+
}
171+
}
172+
}
173+
});
174+
175+
grunt.loadNpmTasks('grunt-cmd-transport');
176+
grunt.loadNpmTasks('grunt-cmd-concat');
177+
178+
grunt.registerTask('build', ['transport', 'concat']);
179+
};
180+
181+
```
182+
183+
最后的最后,进入项目所在目录,命令行输入:
184+
185+
```
186+
grunt build
187+
```
188+
189+
一切顺利的话,你就可以看到变化了!
190+
191+
192+
193+
194+
195+
196+
197+
198+
199+
200+
201+
202+

0 commit comments

Comments
 (0)