當本身在學習webpack的時候,在網上發現中文的很詳細的教程不多,因而便想將本身學習webpack的筆記記錄整理下來,便有了這篇文章,但願對你們有所幫助,若是有錯誤,歡迎你們指出。css
在使用webpack的項目中,默認配置文件爲webpack.config.js
, 模塊文件,和Node寫法同樣,對外暴露接口,主要屬性有:html
模塊系統的幾種類型react
<script>
標籤類型webpack
CommonJsgit
優勢github
缺點web
AMD正則表達式
優勢npm
ES6json
優勢
缺點
模塊要可以在客戶端中去執行,則必須將它們從 server => browser
極端的想法:
分塊轉換的想法:
webpack它能將依賴的模塊轉化成能夠表明這些包的靜態文件
它的目標有
咱們知道,對於瀏覽器來講,加載的資源越少,響應的速度也就越快,因此有時候咱們爲了優化瀏覽器的性能,會盡量的將資源合併到一個主文件app.js
裏面。可是這致使的很大的缺點:
而webpack能夠很好的解決以上缺點,由於它是一個十分聰明的模塊打包系統,當你正確配置後,它會比你想象中的更強大,更優秀。
咱們能夠直接使用npm進行全局安裝
npm install webpack -g
在常規項目中把webpack依賴加入到package.json
npm init
npm install webpack --save
更詳盡的安裝方法個能夠參考webpack安裝
啓動
webpack
若是你想當改變一個文件而讓webpack實時編譯
webpack --watch
若是你想把默認的配置文件webpack.config.js
改爲自定義文件
webpack --config customconfig.js
首先先貼上一個比較完整的webpack.config.js
的代碼,再詳細介紹:
// webpack.config.js var path = require('path') var webpack = require('webpack') module.exports = { entry: ['./src/index'], output: { path: path.join(__dirname, 'dist'), filename: 'bundle.js' }, plugins: [ new webpack.optimize.UglifyJsPlugin({ compressor: { warnings: false, }, }), new webpack.optimize.OccurenceOrderPlugin() ], module: { loaders: [{ test: /\.css$/, loaders: ['style', 'css'] }] } }
就像我在前面提到的,webpack.config.js
的寫法和在Node裏的寫法相同,咱們主要看的就是文件中的module.exports
裏面的內容
output是指輸出文件的配置項
plugins 顧名思義,使用插件能夠給webpack添加更多的功能,使webpack更加的靈活和強大,webpack有兩種類型的插件:
webpack內置的插件
// 首先要先安裝webpack模塊 var webpack = require("webpack"); module.exports = { new webpack.optimize.UglifyJsPlugin({ compressor: { warnings: false, }, }) };
webpack外置插件
好比:
//npm install component-webpack-plugin 先要在安裝該模版 var ComponentPlugin = require("component-webpack-plugin"); module.exports = { plugins: [ new ComponentPlugin() ] }
更多的插件以及插件的用法,你們能夠到webpack的插件上查看。
module 配置處理文件的選項
loaders 一個含有wepback中能處理不一樣文件的加載器的數組
loaders 的安裝方法
$ npm install xxx-loader --save-dev
講到這裏,我相信你們都會對wepback有了更深的認識,可是卻十分的鬆散,不能把它們串起來,那接下來我就用幾個小的demo來讓你們梳理梳理起來
首先請你們創建一個和我同樣文件結構的文件夾,在這裏我也說明下這個demo大概要作的事情,就是將css文件都打包放到一個js文件,而且對圖片解壓,而且要對這個js文件進行自動壓縮。
DemoOne |- dist |- src |- index.js |- index.html |- style.css |- demo.png(隨便找一張圖片就能夠) |- package.json |- webpack.config.js
首先看index.html
代碼
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>demo1</title> </head> <body> <div>Hello,world</div> <img src="./demo.png" alt=""> <script src="../dist/bundlle.js"></script> </body> </html>
再看style.css
body{ background:red; }
這個時候咱們尚未寫webpack.config.js
,打開index.html
,會看到
接下來,咱們在webpack.config.js
下加上以下代碼
// webpack.config.js var path = require('path') var webpack = require('webpack'); module.exports = { entry: ['./src/index'], output: { path: path.join(__dirname, 'dist'), filename: 'bundle.js' }, plugins: [ new webpack.optimize.UglifyJsPlugin({ compressor: { warnings: false, }, }) ], module: { loaders: [{ test: /\.css$/, loaders: ['style', 'css'] }, { test: /\.(png|jpg)$/, loaders: [ 'file?hash=sha512&digest=hex&name=[hash].[ext]', 'image-webpack?bypassOnDebug&optimizationLevel=7&interlaced=false' ] }] } }
固然,在開始用webpack以前,要先安裝相對應的模塊,解析css文件 圖片文件以及由於要對文件進行壓縮,因此也要用到上文中所說的webpack自身內置的插件,因此也要導入webpack模塊
$ npm install style-loader css-loader image-webpack-loader webpack --save-dev
可是這個時候你打開瀏覽器會發現,頁面依舊沒有什麼效果,這是確定的!我想你們確定知道下一步該怎麼作了,沒錯!在入口文件裏面增長內容
require('./style.css'); require('./demo.png');
再運行webpack
,出現上圖相似提示後,打開瀏覽器,你會發現變成了這個樣子
而且在dist
文件夾內,多出了兩個文件,一個f1341ce5ea165e06ec3358441b52d5ea.png
(隨機產生的名字)若是你想得到這個名字,能夠將require('./demo.png')
輸出查看,以及還有bundle.js
,比較圖片先後的大小,
能夠發現,文件大小發生了改變。打開bundle.js
你會發現該文件也被壓縮了。是否是感受很神奇?! 還有一個比較好玩的插件htmlwebpackplugin能夠點擊這裏看看,把上面的例子改變下哦。
我相信看到這裏你對webpack
必定有了必定的認識,其實webpack
還有不少強大的功能,好比,webpack-dev-server
能夠自動生成一個小型的NodeJs Express
服務器從而實現webpack十分實用的功能熱替換(HMR) 和其它的工具gulp
grunt
等一塊兒使用。。。最後值得一提的是react
和webpack
是一對絕佳cp啊,有木有!!