構建工具搭建之webpack

vsonChen

前序:
其實我并不喜歡寫筆記挫掏,但是由于健忘癥日趨嚴重侦另,感覺筆記還是需要寫的。接下來的我會寫webpack、vue淋肾、fetch硫麻、node、koa的開發(fā)經歷樊卓,希望對日后也有幫助拿愧。

注:本文只適用于webpack2.x之前版本,4.0版本對optimization碌尔、plugins等進行了整合修改浇辜,修改較大,暫時沒時間對其修改進行整合

進入正題

搭建webpack準備工作:

1唾戚、安裝node(我們需要用npm命令來安裝webpack)

2柳洋、安裝webpack(npm install webpack --save-dev)

3、npm init初始化項目列表


開始搭建webpack所需插件和配置文件:

首先叹坦,我們需要部署好我們開發(fā)目錄的文件結構熊镣,這邊我先創(chuàng)建一個initProject文件夾來存放開發(fā)代碼,和一個projectOutput文件夾來存放輸出代碼募书。然后在主目錄下創(chuàng)建一個webpack.config.js文件绪囱。

接著,我們需要定義輸入和輸出的js文件路徑

var webpack=require('webpack');

module.exports={
   entry:{
       "main":__dirname+"/initProject/index.js"
   },
   output:{
       path:__dirname+"/projectOutput/",
       filename:"[name].js"
   }
};

至此莹捡,webpack的基本搭建就完成了鬼吵,我們需要了解我們實際開發(fā)需要什么功能:

1、例如編譯less篮赢,編譯es語言等等齿椅,這時候我們需要用到loader

一、首先我們看下loaders處理器有哪些:

1启泣、樣式處理器(需安裝相關css處理模塊涣脚,例如less需安裝less)

css-loader ????處理css中路徑引用等問題
style-loader ???動態(tài)把樣式寫入css
sass-loader ???scss編譯器
less-loader ????less編譯器
postcss-loader ??scss再處理
autoprefixer ??scss自動添加后綴

2、js處理器

babel-loader ???加載babel編譯器(處理es6寥茫、jsx等語言)
jsx-loader ????加載jsx擴展語言處理器(babel-loader可以編譯)

babel-loader:
babel-core ???編譯babel核心功能包
babel-preset-es2015 ???用于編譯es6的依賴包
babel-preset-stage-0 ???用于編譯es7的依賴包
babel-preset-react ?用于編譯react中jsx語言的依賴包

3遣蚀、文件/圖片處理

file-loader ????文件/圖片打包
url-loader ????對file-loader的封裝(圖片轉化,小于8K自動轉化為base64的編碼)

4坠敷、json處理器(已廢除)

json-loader ????對json文件進行處理打包

5、html處理器

html-loader ????對html文件進行處理打包

6射富、vue處理器

vue-loader ????對vue文件進行處理打包

二膝迎、接下來我們就要安裝我們需要的loaders和引用

安裝loaders:

npm install XXX-loader --save-dev

使用loaders:

module:{
    loaders:[  
        {  
            test:/\.(png|jpg|gif)/, loader:"url-loader?limit=8192"  
        },
        {  
            test:/\.css/, loader:"style!css"  
        },
        {
            test: /\.js$/, exclude: /node_modules/, loader: 'babel'
    ]
}  

對于webpack2

module:{
  rules:[
      {
          test: /\.less$/,
          use:[
              "style-loader",
              "css-loader",
              "less-loader"
          ]
      },
      {
          test: /\.js$/,
          use:["babel-loader"],
          exclude: /node_modules/
      },
      {
          test: /\.vue$/,
          use:[
              {loader: "vue"}
          ]
      }
  ]
}

接下來我們需要 babel-plugin-transform-runtime和babel-runtime來完成特定方法的轉碼(promise等)
與babel-polyfill引入的方法對比可以自行查找

npm install babel-plugin-transform-runtime --save-dev
npm install babel-runtime --save-dev

這里注意一下,webpack2新特性:
UglifyJsPlugin 將不再把所有 loader 都切到代碼壓縮模式胰耗。 debug 選項已經被移除限次。Loader 不應該再從 Webpack 的配置那里讀取自己選項了。取而代之的是,你需要通過 LoaderOptionsPlugin 來提供這些選項卖漫。

plugins:[
    new webpack.LoaderOptionsPlugin({
        options: {
            babel: {
                presets: ['es2015',"stage-0"],
                plugins: ['transform-runtime']
            }
        }
    })
]

說明:test為后綴匹配文件费尽,exclude為不處理的目錄,loader為引用的處理器('?'后面跟各處理器的觸發(fā)行為羊始,可用query設定)

2旱幼、插件

1、UglifyJsPlugin

用于js壓縮突委、混淆柏卤,compress壓縮過程

plugins:[
    new webpack.optimize.UglifyJsPlugin({uglifyObject})
]

uglifyObject:壓縮選項,參數:

1、compress:boolean|object
2匀油、mangle:boolean|object

boolean 開啟關閉壓縮or混淆缘缚,
object:{warnings:false,except:array}

warnings:錯誤提醒,except:排除操作項

2敌蚜、HtmlWebpackPlugin

生成html文件桥滨,自動加載生成的js文件,后帶hash值

new HtmlWebpackPlugin({
       filename:'html/indexMin.html',//輸出文件路徑
       template:__dirname+'/src/html/index.html',//輸入文件模板路徑
       inject:true,//js設置到body加載
       //簡化代碼
       minify:{
           removeComments:true,    //移除HTML中的注釋
           collapseWhitespace:false    //刪除空白符與換行符
       }
    })

其他參數:
title: 用來生成頁面的 title 元素
filename: 輸出的 HTML 文件名弛车,默認是 index.html, 也可以直接配置帶有子目錄齐媒。
template: 模板文件路徑,支持加載器帅韧,比如 html!./index.html
inject: true | 'head' | 'body' | false ,注入所有的資源到特定的 template 或者 templateContent 中里初,如果設置為 true 或者 body,所有的 javascript 資源將被放置到 body 元素的底部忽舟,'head' 將放置到 head 元素中双妨。
favicon: 添加特定的 favicon 路徑到輸出的 HTML 文件中。
minify: {} | false , 傳遞 html-minifier 選項給 minify 輸出
hash: true | false, 如果為 true, 將添加一個唯一的 webpack 編譯 hash 到所有包含的腳本和 CSS 文件叮阅,對于解除 cache 很有用刁品。
cache: true | false,如果為 true, 這是默認值浩姥,僅僅在文件修改之后才會發(fā)布文件挑随。
showErrors: true | false, 如果為 true, 這是默認值,錯誤信息會寫入到 HTML 頁面中
chunks: 允許只添加某些塊 (比如勒叠,僅僅 unit test 塊)
chunksSortMode: 允許控制塊在添加到頁面之前的排序方式兜挨,支持的值:'none' | 'default' | {function} default:'auto'
excludeChunks: 允許跳過某些塊,(比如眯分,跳過單元測試的塊)

3拌汇、去后綴

resolve:object;
object:root=>搜索文件的絕對路徑;extensions=>文件后綴名;alias=>文件別名{name:path}弊决;
代碼示例:

resolve: {
    extensions: ['', '.js', '.vue']
}

4噪舀、接下來說一個熱啟動的東西魁淳,叫webpack-dev-server

熱啟動分兩種,一個是frame的形式与倡,主要通過iframe嵌套界逛;另一種是inline的形式,就是頁面數據實時刷新纺座。

首先第一步息拜,安裝:

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

接下來我們需要在webpack.config.js輸出模塊上面加上devServer

devServer:{
    contentBase:'./projectOutput',
    historyApiFallback:true,
    inline:true,
    port:8777
}

這里我注釋一下各個參數的含義:

contentBase:服務器的文件路徑,例如你要執(zhí)行projectOutput下的test.html文件比驻,只需要在瀏覽器打開:http://localhost:8777/test.html该溯。
historyApiFallback:服務器找不到頁面的時候自動跳轉到index。
inline:實時刷新别惦。
port:端口名

至此狈茉,webpack基礎搭建基本完成,可以愉快的去配合上各種語言和框架了

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末掸掸,一起剝皮案震驚了整個濱河市氯庆,隨后出現的幾起案子,更是在濱河造成了極大的恐慌扰付,老刑警劉巖堤撵,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異羽莺,居然都是意外死亡实昨,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門盐固,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荒给,“玉大人,你說我怎么就攤上這事刁卜≈镜纾” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵蛔趴,是天一觀的道長挑辆。 經常有香客問我,道長孝情,這世上最難降的妖魔是什么鱼蝉? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮箫荡,結果婚禮上魁亦,老公的妹妹穿的比我還像新娘。我一直安慰自己菲茬,他們只是感情好吉挣,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著婉弹,像睡著了一般睬魂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上镀赌,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天氯哮,我揣著相機與錄音,去河邊找鬼商佛。 笑死喉钢,一個胖子當著我的面吹牛,可吹牛的內容都是我干的良姆。 我是一名探鬼主播肠虽,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼玛追!你這毒婦竟也來了税课?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤痊剖,失蹤者是張志新(化名)和其女友劉穎韩玩,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體陆馁,經...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡找颓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了叮贩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片击狮。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖妇汗,靈堂內的尸體忽然破棺而出帘不,到底是詐尸還是另有隱情,我是刑警寧澤杨箭,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布寞焙,位于F島的核電站,受9級特大地震影響互婿,放射性物質發(fā)生泄漏捣郊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一慈参、第九天 我趴在偏房一處隱蔽的房頂上張望呛牲。 院中可真熱鬧,春花似錦驮配、人聲如沸娘扩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琐旁。三九已至涮阔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間灰殴,已是汗流浹背敬特。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留牺陶,地道東北人伟阔。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像掰伸,于是被迫代替她去往敵國和親皱炉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內容