Webpack篇

1.webpack的概念。

Webpack 是當下最熱門的前端資源模塊化管理和打包工具。任何形式的資源都可以視作模塊,通過 loader 的轉(zhuǎn)換。

2.webpakc的安裝。

(1)在Node.js ?用npm 全局安裝Webpack: ?npm install webpack -g

通過webpack -h 測試。

(2)進入項目目錄。通過npm init創(chuàng)建 package.json。安裝webpack依賴 npm install webpack --save-dev。

使用命令webpack + xx(需要打包的js名稱) + xx(打包后的js名稱)。使用動態(tài)表達式require綁定js文件,加載依賴。

(3)打包css ,首先需要先安裝loader : npm install css-loader style-loader --save-dev

1.特別注意如果引用css的時候,打包需要在路徑中添加css-loader!,在運用到頁面中需要添加style-loader!。

2.使用webpack entry.js bundle.js --module-bind 'css=style-loader!css-loader'語句就不需要在路徑中引用那些loader了,在后面添加--watch進入監(jiān)視者模式,--progress 可以看到打包過程,--display-modules 列出打包的模塊,--display-reasons 列出打包的原因。

3.webpack的配置文件。

(1)簡歷項目webpack來配置文件。首先創(chuàng)建目錄。

src里面還分別創(chuàng)建script、style文件。來放置js文件跟css文件。

dist 存放打包好的js文件。

(2)系統(tǒng)會默認搜索webpack.config.js這個配置文件, 或者使用 webpack --config +xx(配置文件名)來指定配置文件。

//模塊化輸出

module.exports = {

//打包入口

entry: './src/script/main.js',

output: {

//打包文件放在哪里

path: './dist/js',

//打包文件名

filename: 'bundle.js'

}

}

在有配置文件的狀態(tài)下,只需要運行 webpack就能編譯打包。

(3)如果需要加特別的參數(shù)來輸出,需要在package.json文件里面配置。

"scripts": {

"test": "echo \"Error: no test specified\" && exit 1",

//可以在這里添加你想要輸出的命令。

"webpack": "webpack --config webpack.config.js --progress --display-modules --colors --display-reasons"

},

使用 npm run webpack 編譯。

(4)配置參數(shù)的詳解

1.entry 表示入口文件的路徑。它有三種寫法針對不同的情況。

1.只寫一個單一的路徑:entry: ‘./路徑/.xxx.js’’

2.寫一個數(shù)組: entry:【‘./路徑/.xxx.js’,‘./路徑/.xxx.js’’】(這個也只打包了一個文件)

3.可以寫 一個對象key 加 value的形式:注意這種寫法需要修改 output.filename值才有效果。

entry: {

page1: './page1',

page2: ['./page2','./page3'] }

2.output.filename 這里不要寫絕對路徑且不要寫路徑,只需要寫文件名。

(1)如果entry入口文件有第三種情況的寫法,需要更改filename的文件名。

(2)name 輸出跟入口文件同樣的文件名。

(3)hash 就是本次編譯打包的hash值。(兩個hash值是一樣的)

(4)chunkhash ?是系統(tǒng)的hash值,也可以理解為版本號,只有當文件修改了再打包的文件才會更新這個值。

3.插件。(更新html,因為每次打包好的js文件名是不一定的,所以html引用的js的名字不確定,所以需要插件來解決這個問題。)

1.先案例一個插件推薦網(wǎng)站。插件推薦(隨便百度的)(1)先使用命令安裝插件 npm install html-webpack-plugin --save-dev.

(2)在配置文件中引用:var htmlWebpackPlugin = require(‘html-webpack-plugin’)。

(3)在配置文件中添加一個屬性:

plugins: [

new htmlWebpackPlugin({

//如果不加參數(shù)只是生成一個新的html文件。

//設置模版

template: 'index.html',

//更改html的名字,跟更改打包文件名相同。

filename: 'index-[hash].html',

//還可以制定生成的腳本放在那個地方

inject: 'head'

})

]

context:上下文選項用來決定根目錄(既絕對路徑)的入口文件。

(4)更復雜的功能。把plugins里添加的屬性顯示到html文件中。

在html文件中寫類似js模版語言,需要用<%= %>的格式包裹起來。如果是編寫js代碼的話就不需要中間的= 號。

搜索到一個每一個屬性詳細的配置,需要的可以過來看看html-webpack-plugin ? ? ? ? 1.既然能用代碼的形式拿到數(shù)據(jù),知道了結(jié)構(gòu),那么換一種方式就可以用模版語言的方式引用js文件。

在html標簽里面要用 <%= htmlWebpackPlugin.options.xx(這里寫屬性) %> 另外,需要打印屬性跟值的時候加上JSON.stringify解析成字符串。

2.在output.publicPath:這里可以寫上線的地址前綴。

3.多應用的頁面處理。

(1)在entry添加多個入口文件。

(2)新建相同個數(shù)的new htmlWebpackPlugin,設置不同的文件。

(3)為了解決生成的html載入對應的js文件,可以使用兩種方法:

1.使用chunks瀏覽器傳參的方式:chunks:【‘a(chǎn)’】。

2.使用excludeChunks排除串口的方式:excludeChunks:【‘b’,‘c’】。

(4)減少http請求,把js初始化代碼直接寫到頁面中。

1.htmlWebpackPlugin.files.chunks.main.entry.substr(htmlWebpackPlugin.files.publicPath.length)獲取的值沒有publicPath值。

標簽。excludeChunks排除串口在 模塊生成也能能起到一個篩選的作用。

2.拿到這個值之后使用webpack官方給的api? compilation.assets[包裹獲取的值].source() 這樣就獲取的不是地址,而是js內(nèi)容了。

3.使用模版語言判斷引用js。

4.特別注意inject是開啟是否自動生成<script>標簽。excludeChunks排除串口在 <script>模塊生成也能能起到一個篩選的作用。

(5)loader。
模塊生成也能能起到一個篩選的作用。標簽。excludeChunks排除串口在 模塊生成也能能起到一個篩選的作用。
模塊生成也能能起到一個篩選的作用。標簽。excludeChunks排除串口在 模塊生成也能能起到一個篩選的作用。標簽。excludeChunks排除串口在 模塊生成也能能起到一個篩選的作用。

1.loader 的三種配置方式。

??? 1.loader in require 直接 在require文件的時候在路徑中添加對應的loader。

??? 2.CLI ?在編譯的的語法中添加 --module-bind + 對應的loader。

??? 3.Configuraion 在配置文件中添加一個數(shù)組,添加對于的loader。

2.Configuraion 配置步驟。

? ? 1.先在Babel安裝好babel-loader。npm install --save-dev babel-loader babel-core

? ? 2.配置presets屬性,轉(zhuǎn)換為Latest(包含es2015、2016、2017),安裝Latest插件。

? ? ? ? //配置loader

module: {

loaders: [

{

//匹配以js結(jié)尾的文件

test: /\.js$/,

//使用babel-loader

loader: 'babel',

//為了解決加載速度的問題,可以排除不要掃描的文件夾

exclude: './node_modules',

//有時候排除了也無法解決問題,那就只能指定文件夾

include: './src/',

//如果上面的兩個方法也沒效果,使用node的方法指定絕對路徑。

//1.引用node的api ,var path = require('path');

//2.exclude: path.resolve(__dirname , 'node_modules'),include: path.resolve(__dirname , 'src'),

//用query參數(shù)指定插件解析js。

query: {

//解析js的特效 安裝latest ?npm install --save-dev babel-preset-latest

presets: ['latest'] ? ? ? ? ? ? ? ? ? ? ? ? }

}

] },

3.使用配置文件loader css。

*npm 官網(wǎng) npm(1)打包自動對css做處理,安裝postcss-loader后處理器? npm install postcss-loader --save-dev

npm install autoprefixer --save-dev 添加css瀏覽器前綴。

(2)直接添加新的對象,配置。如果有css文件中import其他css,修改成css-loader?importLoaders=1就好了。

(3)安裝less npm i less ? 安裝less-loader npm i less-loader --save-dev sass同理,如果有import文件,不需要做處理。

4.使用配置文件loader 模版文件。

(1)不管是哪種模版先要下載對應的loader:npm install html-loader --save-dev。

(2)在配置文件loaders中做對應的設置。

(3)ejs 跟tpl格式是相同的。

5.圖片的配置。

(1)安裝file-loader打包圖片,不管是css還是原HTML都會打包成功,注意如果是模版打包絕對路徑?jīng)]有問題,相對路徑需要處理

(2)安裝url-loader。

{

test: /\.(jpg|png|gif)$/i,

loader: 'url-loader',

query: {

//設置一個值,如果大于這個值已原來的格式打包,小于則打包成best64的圖片。

//best64的圖片每一張都是獨立的,所以導致js、html文件變得很大,正常的圖片的好處就是會有緩存。

limit: 40000,

//路徑/ 名字/ hash/ 后綴名

name: 'assets/[name]-[hash]-[ext]'

}

}

(3)壓縮圖片image-webpack-loader 建議跟file-loader 或者 url-loader搭配使用。

{

test: /\.(jpg|png|gif)$/i,

loaders: [

//簡寫,可以把寫成一個請求的方式。

'url-loader?limit=2000&name=assets/[name]-[hash:5].[ext]',

'image-webpack-loader'

] ? ? ? ? ? ? ? ? }

還有很多其他圖片的配置,詳情見npm官網(wǎng)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 構(gòu)建一個小項目——FlyBird,學習webpack和react。(本文成文于2017/2/25) 從webpac...
    布蕾布蕾閱讀 17,107評論 31 98
  • 無意中看到zhangwnag大佬分享的webpack教程感覺受益匪淺,特此分享以備自己日后查看,也希望更多的人看到...
    小小字符閱讀 8,358評論 7 35
  • 開始著手項目打包的一些東西,還不是特別懂,一邊學習,一邊做筆記好啦。1.webpack的概念。Webpack 是當...
    橫沖直撞666閱讀 362評論 0 0
  • GitChat技術雜談 前言 本文較長,為了節(jié)省你的閱讀時間,在文前列寫作思路如下: 什么是 webpack,它要...
    蕭玄辭閱讀 12,867評論 7 110
  • 正如愛情,如果不能真正理解和接受對方的不好,不能與之共同進退經(jīng)歷磨難,就請別說愛,至少別說深愛。 然而我說的不...
    那年小雪閱讀 312評論 0 0

友情鏈接更多精彩內(nèi)容