摘要:為何選擇壓縮編譯單元測試代碼檢查等我們需要自動化,不必重復(fù)勞動,減小工作量。用于保存項目元數(shù)據(jù)。圖像壓縮模塊。監(jiān)視文件變動,做出相應(yīng)動作。
為何選擇Grunt?
準(zhǔn)備工作 安裝node.js壓縮、編譯、單元測試、代碼檢查等 我們需要自動化,不必重復(fù)勞動,減小工作量。為何選擇Grunt呢?好像是沒有更好的選擇了。
Grunt基于Node.js,安裝之前要先安裝Node.js。
shellbrew install node更新npm
shellsudo npm install npm -g安裝 grunt-cli
安裝 grunt-cli 并不等于安裝了 Grunt 任務(wù)運行器
Grunt CLI 的任務(wù)是運行 Gruntfile 指定的 Grunt 版本。 這樣就可以在一臺電腦上同時安裝多個版本的 Grunt。(沒有懂,俺直接實戰(zhàn))
shellnpm install -g grunt-cliGrunt必備文件
創(chuàng)建文件必須創(chuàng)建文件夾,我建立了一個 test 的文件夾,一個標(biāo)準(zhǔn)的 grunt 項目中必須有兩個文件。
package.json:用于保存項目元數(shù)據(jù)。
Gruntfile.js : 用于配置或定義任務(wù)、加載 Grunt 插件。在test1文件夾中創(chuàng)建這兩個文件吧。那么文件中寫什么內(nèi)容呢。我們首先來關(guān)注一下package.json寫什么內(nèi)容
json{ "name": "test", "version": "1.0.0" }運行
在項目的根目錄下運行下面的命令
shellnpm install命令執(zhí)行過程
lognpm WARN package.json [email protected] No description npm WARN package.json [email protected] No repository field. npm WARN package.json [email protected] No README data
添加內(nèi)容提示說沒有描述信息沒有README之類的
在根目錄添加一個 README.md 文件
在 package.json 中添加下面內(nèi)容之后
{ "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的文件內(nèi)容發(fā)現(xiàn)多了 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的文件內(nèi)容中的 devDependencies 的信息又增加了
json "devDependencies": { "grunt": "^0.4.5", "grunt-contrib-uglify": "^0.8.0" }使用方法
還記得我們上面說一個Grunt項目要兩個必須的文件一個 package.json 和Gruntfile.js,注意大小寫,Linux區(qū)分大小寫的,創(chuàng)建 Gruntfile.js 并寫入如下內(nèi)容
js// 包裝函數(shù) module.exports = function(grunt) { // 任務(wù)配置,所有插件的配置信息 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,//打開或關(guān)閉使用默認(rèn)選項源壓縮。 }, app_task: { files: { "build/app.min.js": ["lib/index.js", "lib/test.js"] } } } }); // 告訴grunt我們將使用插件 grunt.loadNpmTasks("grunt-contrib-uglify"); // 告訴grunt當(dāng)我們在終端中輸入grunt時需要做些什么 grunt.registerTask("default", ["uglify"]); };分析
banner:在build/app.min.js 文件生成內(nèi)容如日期什么的
files:將 lib 目錄中的 js 壓縮合并生成到 build 目錄中生成 app.min.js
運行g(shù)runt輸入命令下面命令,好了,我的沒有錯誤正常的。如果有錯誤,會有錯誤日志,自己分析哦。
shellgruntgrunt-contrib-watch
安裝插件用途:監(jiān)控文件變化并自動運行g(shù)runt的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");
數(shù)組中添加了watch
jsgrunt.registerTask("default", ["uglify","watch"]);
添加了watch后,完整的 Gruntfile.js
js// 包裝函數(shù) module.exports = function(grunt) { // 任務(wù)配置,所有插件的配置信息 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當(dāng)我們在終端中輸入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文件中進(jìn)行維護(hù),寫在paths中后,就可以在每個Stylus文件中調(diào)用它們。define 可以定義一些全局變量,然后在Stylus中使用,但我不喜歡使用這個配置,而是更喜歡把全局變量放在一個多帶帶的Stylus文件中,然后將這個文件加入paths的數(shù)組中。一句話,把所有不會直接產(chǎn)出CSS的Stylus代碼分成若干個Stylus文件,然后全部添加到paths中,這樣在所有Stylus文件中都可以隨時調(diào)用了,但要注意這些Stylus文件的調(diào)用關(guān)系和使用先后順序。
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中調(diào)試Stylus。
use 可以引入一些Stylus的其他grunt插件。
常用模塊設(shè)置grunt-contrib-clean:刪除文件。npm>>
grunt-contrib-compass:使用compass編譯sass文件。npm>>
grunt-contrib-concat:合并文件。npm>>
grunt-contrib-copy:復(fù)制文件。npm>>
grunt-contrib-cssmin:壓縮以及合并CSS文件。npm>>
grunt-contrib-imagemin:圖像壓縮模塊。npm>>
grunt-contrib-jshint:檢查JavaScript語法。npm>>
grunt-contrib-uglify:壓縮以及合并JavaScript文件。npm>>
grunt-contrib-watch:監(jiān)視文件變動,做出相應(yīng)動作。npm>>
grunt-contrib-stylus:stylus編寫styl輸出css npm>>
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/85549.html
摘要:世界的構(gòu)建工具為何要用構(gòu)建工具一句話自動化。由于擁有數(shù)量龐大的插件可供選擇,因此,你可以利用自動完成任何事,并且花費最少的代價。要想使用,首先必須將安裝到全局環(huán)境中,使用的進(jìn)行安裝。 你沒有理由不學(xué)、不用! jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt, grunt是一套前端自動化工具,一個基于nodeJs的命令行工具,一般用于:...
摘要:世界的構(gòu)建工具為何要用構(gòu)建工具一句話自動化。由于擁有數(shù)量龐大的插件可供選擇,因此,你可以利用自動完成任何事,并且花費最少的代價。要想使用,首先必須將安裝到全局環(huán)境中,使用的進(jìn)行安裝。 你沒有理由不學(xué)、不用! jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt, grunt是一套前端自動化工具,一個基于nodeJs的命令行工具,一般用于:...
摘要:所以它在某些程度上,跟的功能有些相同。嚴(yán)格上講,模塊化不是他強調(diào)的東西,他旨在規(guī)范前端開發(fā)流程。更是明顯強調(diào)模塊化開發(fā),而那些文件壓縮合并預(yù)處理等功能,不過是他附帶的功能。 1. webpack 是什么? showImg(https://segmentfault.com/img/remote/1460000012293461); 先來說一下 webpack 是什么。 webpack 的...
摘要:安裝成功的驗證方式中輸入如果輸出版本號就說明沒有問題。這里再提一點,因為國內(nèi)的某些原因,通過安裝工具可能會非常慢,這里需要我們做一點修改,也就是使用淘寶鏡像。 最近看視頻學(xué)習(xí)了前端自動化的一些知識,確實讓我大開眼界。感覺前端越來越神器了。同時跟著視頻自己也嘗試運用了一些工具去構(gòu)建前端項目,但是中間遇見了很多坑,磕磕絆絆的才實現(xiàn)了一點功能,所以打算記錄一下學(xué)習(xí)過程中的筆記。 首先列舉一下...
閱讀 2264·2021-09-26 09:55
閱讀 3596·2021-09-23 11:22
閱讀 2157·2019-08-30 15:54
閱讀 1906·2019-08-28 18:03
閱讀 2600·2019-08-26 12:22
閱讀 3435·2019-08-26 12:20
閱讀 1732·2019-08-26 11:56
閱讀 2254·2019-08-23 15:30