摘要:为何选择压缩编译单元测试代码检查等我们需要自动化,不必重复劳动,减小工作量。用于保存项目元数据。图像压缩模块。监视文件变动,做出相应动作。
为何选择Grunt?
准备工作 安装node.js压缩、编译、单元测试、代码检查等 我们需要自动化,不必重复劳动,减小工作量。为何选择Grunt呢?好像是没有更好的选择了。
Grunt基于Node.js,安装之前要先安装Node.js。
shellbrew install node更新npm
shellsudo npm install npm -g安装 grunt-cli
安装 grunt-cli 并不等于安装了 Grunt 任务运行器
Grunt CLI 的任务是运行 Gruntfile 指定的 Grunt 版本。 这样就可以在一台电脑上同时安装多个版本的 Grunt。(没有懂,俺直接实战)
shellnpm install -g grunt-cliGrunt必备文件
创建文件必须创建文件夹,我建立了一个 test 的文件夹,一个标准的 grunt 项目中必须有两个文件。
package.json:用于保存项目元数据。
Gruntfile.js : 用于配置或定义任务、加载 Grunt 插件。在test1文件夹中创建这两个文件吧。那么文件中写什么内容呢。我们首先来关注一下package.json写什么内容
json{ "name": "test", "version": "1.0.0" }运行
在项目的根目录下运行下面的命令
shellnpm install命令执行过程
lognpm WARN package.json test1@1.0.0 No description npm WARN package.json test1@1.0.0 No repository field. npm WARN package.json test1@1.0.0 No README data
添加内容提示说没有描述信息没有README之类的
在根目录添加一个 README.md 文件
在 package.json 中添加下面内容之后
{ "name": "test", "version": "1.0.0", "description": "测试的例子", "repository": { "type": "git", "url": "https://github.com/JSLite/JSLite.git" } }
安装 Grunt 插件于是乎万事大吉了
在此项目中安装 Grunt 插件
shellsudo npm install grunt --save-dev
package.json的文件内容发现多了 devDependencies 的信息
目录多了一个 node_modules 的文件夹
json{ "name": "test", "version": "1.0.0", "description": "测试的例子", "repository": { "type": "git", "url": "https://github.com/JSLite/JSLite.git" }, "devDependencies": { "grunt": "^0.4.5" } }
运行 npm install
安装插件用途:压缩js,css文件
插件名称:grunt-contrib-uglify
shellsudo npm install grunt-contrib-uglify --save-dev
安装成功之后 在package.json的文件内容中的 devDependencies 的信息又增加了
json "devDependencies": { "grunt": "^0.4.5", "grunt-contrib-uglify": "^0.8.0" }使用方法
还记得我们上面说一个Grunt项目要两个必须的文件一个 package.json 和Gruntfile.js,注意大小写,Linux区分大小写的,创建 Gruntfile.js 并写入如下内容
js// 包装函数 module.exports = function(grunt) { // 任务配置,所有插件的配置信息 grunt.initConfig({ pkg: grunt.file.readJSON("package.json"), // uglify插件的配置信息 uglify: { options: { banner: "/*! This is uglify test - " + "<%= grunt.template.today("yyyy-mm-dd") %> */", beautify: true,//是否压缩 mangle: false, //不混淆变量名 compress:true,//打开或关闭使用默认选项源压缩。 }, app_task: { files: { "build/app.min.js": ["lib/index.js", "lib/test.js"] } } } }); // 告诉grunt我们将使用插件 grunt.loadNpmTasks("grunt-contrib-uglify"); // 告诉grunt当我们在终端中输入grunt时需要做些什么 grunt.registerTask("default", ["uglify"]); };分析
banner:在build/app.min.js 文件生成内容如日期什么的
files:将 lib 目录中的 js 压缩合并生成到 build 目录中生成 app.min.js
运行grunt输入命令下面命令,好了,我的没有错误正常的。如果有错误,会有错误日志,自己分析哦。
shellgruntgrunt-contrib-watch
安装插件用途:监控文件变化并自动运行grunt的watch插件
插件名称:grunt-contrib-watch
shellsudo npm install grunt-contrib-watch --save-dev使用
修改 Gruntfile.js
initConfig 中添加了
js // watch插件的配置信息 watch: { another: { files: ["lib/*.js"], tasks: ["uglify"], options: { // Start another live reload server on port 1337 livereload: 1337 } } }
增加了一行
jsgrunt.loadNpmTasks("grunt-contrib-watch");
数组中添加了watch
jsgrunt.registerTask("default", ["uglify","watch"]);
添加了watch后,完整的 Gruntfile.js
js// 包装函数 module.exports = function(grunt) { // 任务配置,所有插件的配置信息 grunt.initConfig({ pkg: grunt.file.readJSON("package.json"), // uglify插件的配置信息 uglify: { options: { banner: "/*! This is uglify test - " + "<%= grunt.template.today("yyyy-mm-dd") %> */" }, app_task: { files: { "build/app.min.js": ["lib/index.js", "lib/test.js"] } } }, // watch插件的配置信息 watch: { another: { files: ["lib/*.js"], tasks: ["uglify"], options: { // Start another live reload server on port 1337 livereload: 1337 } } } }); // 告诉grunt我们将使用插件 grunt.loadNpmTasks("grunt-contrib-uglify"); grunt.loadNpmTasks("grunt-contrib-watch"); // 告诉grunt当我们在终端中输入grunt时需要做些什么 grunt.registerTask("default", ["uglify","watch"]); };grunt-contrib-watch 安装 stylus
shellsudo npm install grunt-contrib-watch --save-dev修改 Gruntfile.js
initConfig 中添加了
jsstylus:{ build: { options: { linenos: false, compress: false, banner: "/** * <%= pkg.name %> - <%= pkg.description %> * version <%= pkg.version %> * author <%= pkg.author %> * date <%= grunt.template.today() %> **/ " }, files: [{ "css/historyDetail.css": "styl/historyDetail.styl" }] } },
下面添加
js grunt.loadNpmTasks("grunt-contrib-stylus");
paths 将自动使用@import来引入一些Stylus文件,比如一些Mixin集合,放在一个Stylus文件中进行维护,写在paths中后,就可以在每个Stylus文件中调用它们。define 可以定义一些全局变量,然后在Stylus中使用,但我不喜欢使用这个配置,而是更喜欢把全局变量放在一个多带带的Stylus文件中,然后将这个文件加入paths的数组中。一句话,把所有不会直接产出CSS的Stylus代码分成若干个Stylus文件,然后全部添加到paths中,这样在所有Stylus文件中都可以随时调用了,但要注意这些Stylus文件的调用关系和使用先后顺序。
compress 及 linenos 是两个Boolean值,用来控制是否压缩处理后的CSS代码以及是否在CSS代码中保留注释。
banner 是一个字符串,会被放置在CSS文件的最前面,一般我用来写注释,比如
banner: "/** * <%= pkg.name %> - <%= pkg.description %> * version <%= pkg.version %> * author <%= pkg.author %> * date <%= grunt.template.today() %> **/ "
firebug 将控制是否使用一个Firebug的Stylus插件FireStylus for Firebug,可以在Firefox中调试Stylus。
use 可以引入一些Stylus的其他grunt插件。
常用模块设置grunt-contrib-clean:删除文件。npm>>
grunt-contrib-compass:使用compass编译sass文件。npm>>
grunt-contrib-concat:合并文件。npm>>
grunt-contrib-copy:复制文件。npm>>
grunt-contrib-cssmin:压缩以及合并CSS文件。npm>>
grunt-contrib-imagemin:图像压缩模块。npm>>
grunt-contrib-jshint:检查JavaScript语法。npm>>
grunt-contrib-uglify:压缩以及合并JavaScript文件。npm>>
grunt-contrib-watch:监视文件变动,做出相应动作。npm>>
grunt-contrib-stylus:stylus编写styl输出css npm>>
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/85549.html
摘要:世界的构建工具为何要用构建工具一句话自动化。由于拥有数量庞大的插件可供选择,因此,你可以利用自动完成任何事,并且花费最少的代价。要想使用,首先必须将安装到全局环境中,使用的进行安装。 你没有理由不学、不用! jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt, grunt是一套前端自动化工具,一个基于nodeJs的命令行工具,一般用于:...
摘要:世界的构建工具为何要用构建工具一句话自动化。由于拥有数量庞大的插件可供选择,因此,你可以利用自动完成任何事,并且花费最少的代价。要想使用,首先必须将安装到全局环境中,使用的进行安装。 你没有理由不学、不用! jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt, grunt是一套前端自动化工具,一个基于nodeJs的命令行工具,一般用于:...
摘要:所以它在某些程度上,跟的功能有些相同。严格上讲,模块化不是他强调的东西,他旨在规范前端开发流程。更是明显强调模块化开发,而那些文件压缩合并预处理等功能,不过是他附带的功能。 1. webpack 是什么? showImg(https://segmentfault.com/img/remote/1460000012293461); 先来说一下 webpack 是什么。 webpack 的...
摘要:安装成功的验证方式中输入如果输出版本号就说明没有问题。这里再提一点,因为国内的某些原因,通过安装工具可能会非常慢,这里需要我们做一点修改,也就是使用淘宝镜像。 最近看视频学习了前端自动化的一些知识,确实让我大开眼界。感觉前端越来越神器了。同时跟着视频自己也尝试运用了一些工具去构建前端项目,但是中间遇见了很多坑,磕磕绊绊的才实现了一点功能,所以打算记录一下学习过程中的笔记。 首先列举一下...
阅读 2252·2021-09-26 09:55
阅读 3583·2021-09-23 11:22
阅读 2151·2019-08-30 15:54
阅读 1894·2019-08-28 18:03
阅读 2590·2019-08-26 12:22
阅读 3425·2019-08-26 12:20
阅读 1722·2019-08-26 11:56
阅读 2245·2019-08-23 15:30