前面我们安装了Grunt,现在来说说怎么使用这东西了。一些基本的之前也说了,现在看Gruntfile.js里的东西(文档中使用的js是 JavaScript 制作圆形时钟 中的js文件):
1. // 定义一个模块 并且导出一个wrapper函数
2. module.exports = function(grunt) {
3. // 初始化grunt配置
4. grunt.initConfig({
5. // 动作 concat的作用将连接多个文件为一个文件
6. concat:{
7. // 动作的选项
8. options:{
9. banner:'/*智游教育*/\n'
10. },
11. // 动作涉及的文件
12. dvst:{
13. // 要连接的文件
14. src:['js/control.js','js/Diamond.js','js/dot.js',
15. 'js/second.js','js/Minute.js','js/hour.js',
16. 'js/clock.js'
17. ],
18. // 连接后生成的文件
19. dest:'js/myclock.js'
20. }
21. },
22. uglify:{
23. // 目标文件
24. my_target:{
25. // 涉及的文件
26. files:{
27. // 压缩后生成的文件 : 需要压缩的文件列表
28. 'js/myclock.min.js':['js/control.js','js/Diamond.js','js/dot.js',
29. 'js/second.js','js/Minute.js','js/hour.js',
30. 'js/clock.js'
31. ]
32. }
33. }
34. }
35. })
36. grunt.loadNpmTasks('grunt-contrib-concat')
37. grunt.loadNpmTasks('grunt-contrib-uglify')
38. // 加载grunt插件模块包
39. grunt.registerTask('default',['concat','uglify'])
40. // registerTask注册任务可以使用名执行已注册任务
41. // 注册之后可以使用grunt命令执行任务 可以注册多个任务
42. // 如果任务名称是default就是默认任务 第一个参数任务名字 第二个参数具体要执行的动作
43. };
还有一种方法是这样的:
**package.json**中的代码:
1. {
2. "name": "zy-clock",
3. "version": "1.0.0",
4. "description": "",
5. "main": "index.js ",
6. "srcFile": [
7. "src/js/control.js",
8. "src/js/dot.js",
9. "src/js/js/second.js",
10. "src/js/Minute.js",
11. "src/js/hour.js",
12. "src/js/Diamond.js"
13. ],
14. "scripts": {
15. "test": "echo \"Error: no test specified\" && exit 1"
16. },
17. "author": "",
18. "license": "ISC",
19. "devDependencies": {
20. "grunt": "^1.0.1",
21. "grunt-contrib-concat": "^1.0.1",
22. "grunt-contrib-cssmin": "^2.2.1",
23. "grunt-contrib-jshint": "^1.1.0",
24. "grunt-contrib-uglify": "^3.0.1",
25. "grunt-contrib-watch": "^1.0.0"
26. }
27. }
**gruntfile.js**的代码:
1. // 使用grunt时package.json里面name的名字或值
2. // 不能与项目名同名
3. module.exports = function(grunt) {
4. grunt.initConfig({
5. // 读取项目的配置信息
6. package:grunt.file.readJSON('package.json'),
7. concat:{
8. options:{
9. banner:'/*智游教育*/\n'
10. },
11. dist:{
12. // 要拼接的文件列表
13. // <%=package.srcFile%><% %>将会展开package.srcFile的值
14. src:'<%=package.srcFile%>',
15. dest:'js/<%=package.name%>.js'
16. // css合并
17. // src:'css/*.css',
18. // dest:'css/index1.css'
19. }
20. },
21. // css压缩
22. uglify:{
23. my_target:{
24. files:{
25. 'js/<%=package.name%>.min.js':'js/<%=package.name%>.js'
26. }
27. }
28. },
29.
30.
31. // css压缩
32. cssmin:{
33. target:{
34. files:{
35. // 执行后生成的文件:执行的文件
36. 'css/index.min.css':'css/*.css'
37. }
38. }
39. },
40. // 监视文件变化动作
41. // watch:{
42. // // 监视一组文件 当文件变化时执行响应的动作或任务
43. // scripts:{
44. // files:['gruntfile.js'],
45. // // 当文件变化时要执行的任务 运行grunt watch
46. // // tasks:['default']
47. // }
48. // },
49.
50.
51. // 检查javascript语法
52. jshint:{
53. options:{
54. // 循环条件语句必须使用花括号和分号
55. curly:true,
56. // 兼容低级浏览器
57. es3:false,
58. // 禁止重写原生对象的原型 Array
59. freeze:true,
60. // 构造函数首字母必须大写
61. nemcap:true,
62. // 为true时禁止单引号和双引号
63. 'quotmark':true,
64. // 变量未使用
65. 'unused':false,
66. // 禁止定义之前使用变量 忽略function函数声明
67. latedef:'nofunc'
68.
69. },
70. files:'js/alert.js'
71. }
72.
73. })
74.
75. grunt.loadNpmTasks('grunt-contrib-concat')
76. grunt.loadNpmTasks('grunt-contrib-uglify')
77. grunt.loadNpmTasks('grunt-contrib-cssmin')
78. // grunt.loadNpmTasks('grunt-contrib-watch')
79. grunt.loadNpmTasks('grunt-contrib-jshint')
80. grunt.registerTask('default',['jshint'])
81. }