前端構建工具的用法—grunt、gulp、browserify、webpack

隨著前端項目的飛速發展,項目越來越大、文件越來越多,前端工程化的工具也越來越多。下面介紹目前最流行的四種構建工具——grunt、gulp、browserify、webpack

所有的構建工具都是基于NodeJs和Npm,所以使用下面任何工具都需要安裝Node

一、grunt

1、需要兩個文件:

Gruntfile.js —— grunt執行任務文件:描述項目會執行的任務。

package.json —— 工程描述文件:描述項目基本信息,和項目中使用到的npm包信息,方便其他人了解項目信息、跑起來該項目。

2、安裝grunt-cli命令環境和項目里面用到的grunt包

npm install grunt-cli -g

mac下面需要sudo:sudo npm install grunt-cli -g

npm install grunt --save-dev  // --save-dev:表示該npm包在dev開發環境時需要用到,加這個會在package.json中自動增加相關包描述。

3、安裝grunt任務相關的npm包

npm install xxx --save-dev

4、Gruntfile.js任務寫法

module.exports = function(grunt){// 加載需要的任務包grunt.loadNpmTasks('grunt-contrib-less');grunt.loadNpmTasks('grunt-contrib-uglify');// 初始化任務
    grunt.initConfig({"less": {  //包名"a":{  //任務名"src": "a.less","dest": "index.css"},"b":{"src": "b.less","dest": "main.css"}},"uglify": {"a": {"src": "aa.js","dest": "index.js"}}});

   // 注冊多任務
   grunt.registerTask('abc', ['less:a', 'uglify']);

}

?總結:最早開始自動化構建前端項目的工具之一,極大提高前端開發過程中的開發效率、更加方便工程化的部署到線上以及優化了線上前端代碼。

二、gulp

1、需要兩個文件:

gulpfile.js —— gulp執行任務文件:描述項目會執行的任務。

package.json —— 工程描述文件:描述項目基本信息,和項目中使用到的npm包信息,方便其他人了解項目信息、跑起來該項目。

2、安裝gulp-cli命令環境和項目里面用到的gulp包

npm install gulp-cli -g

mac下面安裝全局包都需要sudo一下:sudo npm install gulp-cli -g

npm install gulp --save-dev  // --save-dev:表示該npm包在dev開發環境時需要用到,加這個會在package.json中自動增加相關包描述。

3、安裝gulp任務相關的npm包

npm install xxx --save-dev

4、gulpfile.js任務寫法

// 引用需要的包
const gulp = require('gulp'); const less = require('gulp-less'); const uglify = require('gulp-uglify');gulp.task('less:a', function(){gulp.src('a.less').pipe(less()).pipe(gulp.dest('css')); });gulp.task('uglify:a', function(){gulp.src('a.js').pipe(uglify()).pipe(gulp.dest('js')); }); // 注冊多任務,默認任務用 default gulp.task('abc', ['less:a', 'uglify:a']);

?優點:1、執行任務比grunt快(原因:讀取二進制流通過pipe執行)2、寫法上更優雅、簡潔、清晰?

三、browserify

使用目的:

1、用作模塊化(跟requireJs、seaJs類似作用)

2、構建化構建打包工作

3、可以使用node中的一些內置模塊如querystring、path、util等,提高工作效率

使用方法:?

1、安裝browserify-cli命令環境和項目中用到的browserify包

npm install -g browserify-cli?

npm install browserify --save-dev

2、項目中自己編寫的模塊,通過 modules.exports 或 ?export 拋出去,如:

// sum.js
module.exports = function (sum1, sum2){return sum1+sum2;
}

引用時通過 require('./sum') 來使用,如:

// index.js
var sum = require('./sum.js');
var querystring = require('querystring');var parse = "a=1&b=2&c=2";
console.log(querystring.parse(parse));console.log(sum(11, 12));

注意:使用node內置模塊或者通過npm下載的包,直接 require('querystring') 即可。但如果是自己編寫的模塊,需要加 ./ ?,require('./sum')

3、編譯

// 通過browserify命令,將index.js編譯成bundle.js
browserify index.js -o bundle.js

4、如果需要 項目自動編譯,需要安裝 全局watchify這個包

npm install -g watchify

執行時,就不用browserify命令,用watchify命令

watchify index.js -o bundle.js

四、webpack

webpack是近來最火的工程化構建工具,為什么這么火?是因為在webpack中 ?“一切皆模塊” !

最大的優點也就在這:js、css、less、sass、json、coffer、image、...... 各種類型文件都可以通過loader來處理打包。

1、安裝webpack-cli命令環境和項目用刀到的webpack包

npm install -g webpack-cli
npm install webpack --save-dev

2、跟browserify第二步一樣,module.export拋出自定義模塊,require來模塊化引用

3、編譯打包

// 跟browserify區別是 沒有 -o
webpack index.js bundle.js
// -w:監視 -p:壓縮代碼
webpack -w -p index.js bundle.js

4、打包less、sass、image等

  1)安裝使用的loader的安裝包

// 同時安裝多個包,可以用 空格 分開
npm install less-loader css-loader style-loader --save-dev

  2)引用less包等

// index.js
require('style-loader!css-loader!less-loader!./less/index.less');
// 或者省去loader簡寫成:
require('style!css!less!./less/index.less');

如果每個文件的loader都這么寫的話,太麻煩,可以在webpack的配置文件作配置

5、配置文件名:webpack.config.js

// webpack.config.js
module.exports = {module: {loaders: [// less結尾的文件,使用style、css、less三種loader處理// 用!連接loader{ test: /\.less$/, loader: 'style!css!less'}]}
};

此時的index.js入口文件引用index.less

require('./less/index.less');

6、配置文件可以配置入口、輸出等

module.exports = {entry: "./index.js", // 入口文件
    output: {filename: 'bundle.js' // 出口文件名
    },module: {loaders: [{ test: /\.less$/, loader: 'style!css!less'}]}
};

7、如果我們要修改完文件后,自動編譯、同時刷新瀏覽器怎么做?

  1)安裝webpack-dev-server 全局包 和webpack-dev-server 項目包

npm install webpack-dev-server -g
npm install webpack-dev-server --save-dev

  2)此時需要使用webpack中另外一個強大的功能——插件,plugins,在配置文件中配置

// 引用webpack
var webpack = require('webpack');module.exports = {entry: "./index.js", // 入口文件
    output: {filename: 'bundle.js' // 出口文件名
    },plugins: [// 自動刷新瀏覽器用到的插件new webpack.DefinePlugin({'process.env.NODE.ENV':"development"})],module: {loaders: [{ test: /\.less$/, loader: 'style!css!less'}]}
};

  3)執行編譯

// --inline:表示實時編譯
webpack-dev-server --inline

8、如果想把命令寫的更簡單,可以在package.json的script屬性中配置

  1)如何生成package.json文件

// init 命令讓你一步步選擇、填寫安裝工程文件的描述
npm init// 或者一步到位
npm init --yes

  2)配置script屬性

{"name": "webpack","version": "1.0.0","description": "","main": "index.js","dependencies": {"css-loader": "^0.25.0","less": "^2.7.1","less-loader": "^2.2.3","style-loader": "^0.13.1","webpack": "^1.13.2"},"devDependencies": {"webpack-dev-server": "^1.15.1"},"scripts": {"dev": "webpack-dev-server --inline"},"keywords": [],"author": "","license": "ISC"
}

  此時,執行變成?

npm run dev

  是不是更簡單了,而且在script里面可以方便做多種環境下的配置命令。

  

以上就是這幾種構建工具的基本使用方法,希望大家工作過程中,盡量使用,去體會它在提高效率的同時帶給我們編程的快樂感覺!

?

轉載于:https://www.cnblogs.com/souyidai/p/util_1.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/270897.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/270897.shtml
英文地址,請注明出處:http://en.pswp.cn/news/270897.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

adb命令刷機vivox20_vivo手機變磚 刷機手機端口連上顯示adb

展開全部vivo的刷機解賬戶鎖方法如下 有了這個方法 以后不管手機出現啥毛病 只要是軟件系統引32313133353236313431303231363533e4b893e5b19e31333365643535起的故障 都能一招搞定提示:刷機有風險 刷機需謹慎 對于刷機造成的一切后果均與本處無關 而避免風險的最好…

SQLServer常用的聚合函數筆記

今天給大家分享一下SQLServer常用的聚合函數,希望對初學者有所幫助!1、COUNT合計函數:返回查詢記錄(行)數。格式:COUNT([ALL|DISTINCT] [表達式|*])參數說明:ALL:默認值,指對查詢所有…

android studio 工程demo例子,Android Studio 實現跑馬燈微項目實例

**閑來無事,自己做了很多小的Demo,現在分享一個小的跑馬燈項目實例,有機會把2048小游戲的Demo也發了。不過那個的算法稍微有點兒復雜,需要整理。首先在創建一個MarqueeTextViewDemo項目在res-layout-activity_main.xml中編寫出相應…

SQLServer常用的配置函數筆記

今天給大家分享一下SQLServer常用的配置函數知識,希望對初學者能有所幫助!1、DATEFIRST Datefirst返回值tinyint說明:datefirst指一周中的第一天,英語中第一天為星期日示例:SELECT DATEFIRST AS 1st Day, DATEPART(dw, GETDATE())…

localdatetime 默認時間_datetime-local設置初始值

//全局變量var format "";//構造符合datetime-local格式的當前日期function getFormat(){format "";var nTime new Date();format nTime.getFullYear()"-";format (nTime.getMonth()1)<10?"0"(nTime.getMonth()1):(nTime.get…

android音樂播放器完整教程,android實現簡單音樂播放器

本文實例為大家分享了android音樂播放器的具體代碼&#xff0c;供大家參考&#xff0c;具體內容如下話不多說先上效果前言寫這個音樂播放器實在是迫不得已。因為我們Andoird課程要求寫一個音樂播放器。所以就有了此項目。這個項目比較簡單&#xff0c;實現了最基本的音樂播放功…

編譯原理

編譯原理是計算機專業的一門重要專業課&#xff0c;旨在介紹編譯程序構造的一般原理和基本方法。內容包括語言和文法、詞法分析、語法分析、語法制導翻譯、中間代碼生成、存儲管理、代碼優化和目標代碼生成。 這門課程是一門真正與代碼做斗爭的課程&#xff0c;對于一個有至于追…

JDK1.8 JVM元數據區取代了永久代,元數據空間并不在虛擬機中,而是使用本地內存

JDK1.8 JVM運行時內存數據區域劃分。1.8同1.7比&#xff0c;最大的差別就是&#xff1a;元數據區取代了永久代。元空間的本質和永久代類似&#xff0c;都是對JVM規范中方法區的實現。不過元空間與永久代之間最大的區別在于&#xff1a;元數據空間并不在虛擬機中&#xff0c;而是…

SQLServer常用的字符串函數梳理

今天給大家分享一下SQLServer常用的字符串函數知識筆記&#xff0c;希望對大家能有所幫助&#xff01;1、ASCII(字符串表達式)作用&#xff1a;返回表達式最左側字符串的ASCII代碼值。示例&#xff1a;SELECT ASCII(ABC),ASCII(A) --返回結果都是65 計算的是第一個字符串的ASCI…

tchar linux,錯誤:Error:未定義標識符_TCHAR

svn sc create 命令行創建服務自啟動今天重裝了系統,Subversion服務也得重裝.照例輸入代碼: sc create svnserve binpath"d:\PortableApps\svn\svnserve.exe - ...Spring&lowbar;Springmvc&lowbar;mybatis一般配置web.xml配置 <?xml version"1.0" e…

Mac 系統引導過程概述 BootCamp 的秘密

http://bbs.feng.com/read-htm-tid-6890655.html轉載于:https://www.cnblogs.com/zengkefu/p/5857710.html

開封機器人餐廳_百合匯主題酒店——開封首家機器人服務員餐廳

【中原經濟網開封新聞訊】 (河南經濟報記者 張長劍 李海) 年底歲末&#xff0c;服務行業的用工荒逐漸凸顯&#xff0c;不過&#xff0c;開封百合匯主題酒店的老板卻不為此發愁&#xff0c;因為&#xff0c;這家店剛剛引進了兩臺高大上的機器人服務員。2月3日&#xff0c;記者在…

SQLServer常見的數學函數梳理

今天給大家分享一下SQLServer常見的數學函數相關的知識筆記。1.絕對值函數ABS(x)和返回圓周率的函數PI()ABS(x)返回x的絕對值,PI()返回圓周率的值用法&#xff1a;select ABS(5),ABS(-10.6),ABS(-99),PI();輸出結果&#xff1a;5 10.6 99 3.141592653589792.平方根函數SQRT(x)S…

android 屬性動畫變大,Android PropertyAnimation 屬性動畫(一)初探

8種機械鍵盤軸體對比本人程序員&#xff0c;要買一個寫代碼的鍵盤&#xff0c;請問紅軸和茶軸怎么選&#xff1f;前言相對于靜態的頁面&#xff0c;動畫往往能更直觀地表達所需的信息&#xff0c;在UI開發過程中起著相當大的作用。Android為我們提供了一系列實現動畫效果的方法…

android stadio svn 使用技巧

有時候有這樣的需求&#xff1a; 就是我一次要改很多的需求&#xff0c;然后代碼要分開提交&#xff0c;那么怎么辦&#xff1f; 提交的時候一個一個的點開看&#xff1f; 比如&#xff1a;這次改的還沒有提上去&#xff0c;又來了一個需求&#xff0c;怎么區分呢 新建一個ac…

用掃地機器人樓下吵嗎_掃地機器人到底好不好用?說說我兩年的使用體驗!

原標題&#xff1a;掃地機器人到底好不好用&#xff1f;說說我兩年的使用體驗&#xff01;說到掃地機器人絕大部分人都非常陌生&#xff0c;因為我國目前還處在掃地機器人發展初期階段&#xff0c;連一線城市普及率都只有5%&#xff0c;所以非常理解大家對新事物的恐懼和排斥&a…

SQLServer常用的日期和時間函數梳理

今天給大家分享一下SQLServer常用的日期和時間函數知識筆記&#xff0c;希望對大家能有所幫助&#xff01;1、DATEADD(datepart,number,date)作用&#xff1a;返回給指定日期加一個時間間隔后新的datetime值參數說明&#xff1a;datepart&#xff1a;指定為日期的哪部分增加數值…