webpack總結(jié)(更新中...)

什么是Webpack-----模塊打包工具

WebPack可以看做是模塊打包機:它做的事情是,分析你的項目結(jié)構,找到JavaScript模塊以及其它的一些瀏覽器不能直接運行的拓展語言(Scss,TypeScript等),并將其轉(zhuǎn)換和打包為合適的格式供瀏覽器使用。

Webpack的工作方式是:把你的項目當做一個整體,通過一個給定的主文件(如:index.js),Webpack將從這個文件開始找到你的項目的所有依賴文件,使用loaders處理它們,最后打包為一個(或多個)瀏覽器可識別的JavaScript文件。


1.webpack的安裝:

//全局安裝

npm install -g webpack

使用: webpack 入口文件名

//安裝到你的項目目錄

npm install --save-dev webpack

使用:npx webpack 入口文件名

2.webpack的配置文件

module.exports = {

entry: __dirname +"/app/main.js",//唯一入口文件

output: {

path: __dirname +"/public",//打包后的文件存放的地方

filename:"bundle.js"http://打包后輸出文件的文件名

????????????}

}

使用:npx webpack //配置好可以省略文件名

注:npx webpack --config webpack.config.js //修改了webpack.config.js 名稱時候,可以用該指令指定執(zhí)行的webpack配置文件,官方文檔描述:使用?--config?選項只是向你表明,可以傳遞任何名稱的配置文件。這對于需要拆分成多個文件的復雜配置是非常有用;

:“__dirname”是node.js中的一個全局變量,它指向當前執(zhí)行腳本所在的目錄

3.更快捷的執(zhí)行打包任務

在package.json中對scripts對象進行相關設置

{

? "name": "vue-manage-system",

? "version": "3.1.0",

? "description": "基于Vue.js 2.x系列 + element-ui 內(nèi)容管理系統(tǒng)解決方案",

? "author": "lin-xin <2981207131@qq.com>",

? "private": true,

? "scripts": {

? ? "bundle":"webpack",// 可以使用?npm run bundle?命令,來替代我們之前使用的?npx?命令

? ? "build": "node build/build.js",

? ? "build:dll": "webpack --config build/webpack.dll.conf.js"

? }

}

使用:npm run bundle

4.運行webpack的方式:

@1:webpack index.js(全局)

@2:npx webpack index.js

@3:npm run bundle

5.做webpack打包時候,輸出的提示命令含義

Hash:本地打包對應的唯一hash值

version:本次打包使用的webpack版本

time:當前打包耗時

asset:打包出的文件名?

size:文件大小

chunks:復雜打包時候,其他打包js的id也會放在bundle.js的chunks字段中

chunks Names:同上,每個js文件對應的名字

entrypoint main = bundle.js? 對應的是配置中入口文件的名字

警告:webpack沒有配置打包環(huán)境和模式時候會報警告

默認的模式是:

mode:'production'//(代碼壓縮)webpack中配置,可選:development(代碼未壓縮)

6.使用loader打包靜態(tài)資源【圖片篇】,配置文件中進行配置

module: {

? ? rules: [{

? ? ? ? test:/\.jpg$/,

????????use:{

? ? ? ? ? ? loader:'file-loader'

????????????????}

????????????}]

}

以上配置代碼含義:打包模塊以jpg結(jié)尾的文件,使用file-loader來幫助我們做jpg文件的打包(若沒有則需要安裝npm install file-loader -D)

file-loader底層幫我們做的事情:

當他發(fā)現(xiàn)在代碼里引入圖片模塊時候,會把這個模塊,幫助打包移動到dist目錄下;

得到圖片(相對于dist目錄的)名稱,將名稱作為返回值,返回給我們引入模塊的變量之中;

7.loader是什么?

loader就是一個打包方案,知道對于某個特定文件,webpack該如何進行打包;

官方文檔定義,loader用于對模塊的源代碼進行轉(zhuǎn)換,可以使你在?import?或"加載"模塊時預處理文件,可以將文件從不同的語言(如 TypeScript)轉(zhuǎn)換為 JavaScript,或?qū)?nèi)聯(lián)圖像轉(zhuǎn)換為 data URL。loader 甚至允許你直接在 JavaScript 模塊中?import?CSS文件!

通俗理解的話,就是,由于webpack不能識別非js結(jié)尾的模塊,所以通過loader使webpack識別出來(loader的作用)

如何配置loader:webpack.config.js中? 配置module-rules(符合的規(guī)則)

拓展:配置loader--在module-rules-options中進行配置

module: {

? ? rules: [{

????????????test:/\.jpg$/,

????????????use:{

????????????loader:'file-loader',

? ? ? ? ? ? options:{

? ? ? ? ? ? ? ? ? ? ? ?name:'[name].[ext]'//占位符:原始名.后綴

? ? ? ? ? ? ? ? ? ? ? ? outputPath:'images/' //當我遇到jpg文件時候,打包時候?qū)⑵浯虬傻絛ist/images的文件夾里

????????????????????????}

????????????????}

????????????}]

}

8.使用loader

在你的應用程序中,有三種使用 loader 的方式(詳見官方文檔):

配置(推薦):在?webpack.config.js?文件中指定 loader。

內(nèi)聯(lián):在每個?import?語句中顯式指定 loader。

CLI:在 shell 命令中指定它們。

9.使用loader打包靜態(tài)資源【圖片篇】,更多配置

url-loader可以實現(xiàn)file-loader所實現(xiàn)的一切功能

當使用url-loader會將圖片轉(zhuǎn)化成一個base64的字符串,然后直接放到js文件里,不是直接生成圖片

好處:省略http請求

缺點:圖片文件大的時候會影響加載速度

因此,可以對圖片的大小進行判斷,圖片較小時候放到js中,較大時候生成圖片,使用limit配置

module: {

? ? rules: [{

????????????test:/\.jpg$/,

????????????use:{

????????????loader:'file-loader',

? ? ? ? ? ? options:{

????????????????????????name:'[name].[ext]'//占位符:原始名.后綴

????????????????????????outputPath:'images/' //當我遇到jpg文件時候,打包時候?qū)⑵浯虬傻絛ist/images的文件夾里????????

? ? ? ? ? ? ? ? ? ? ? ? limit:2048//圖片小于2048時候,圖片轉(zhuǎn)化成一個base64的字符串,放到js文件里,大于2048時候,生成圖片引入

????????????????????????}

????????????????}

????????????}]

}

10.使用loader打包靜態(tài)資源【樣式篇】

@1.需要用css-loader和style-loader配合使用

css-loader:? 分析出幾個css文件之間的關系,最終把這些css文件合并成一段css

style-loader: 在得到css-loader生成的內(nèi)容之后,會把這段內(nèi)容掛載到頁面的head部分

@2.使用less,scss,stylus等的時候,需要添加額外對應的loader來進行編譯

{

? ? ? ? test: /\.less$/,

? ??????loader: ['style-loader','css-loader','less-loader','postcss-loader']

? ? ? ? //或者loader: "style-loader!css-loader!less-loader"

? ? ? }

注:loader是有執(zhí)行順序的(從下到上,從右到左)

@3.postcss-loader: 自動添加廠商前綴;

使用postcss-loader需要目錄中創(chuàng)建postcss.config.js文件(詳見文檔)

配置如下:

module.exports = {

? "plugins": {

????????require('autoprefixer')//需要下載

? }

}

@4.補充:css配置項

imporeLoaders:2

作用:當less中再去@import less文件時候,webpack打包時候可能不會走postcss-loader和less-loader,而直接去走css-loader了,那么則需要用imporeLoaders去規(guī)定,通過import引入的less文件,在引入之前,也要去走2個loader;就會保證不管是在js直接引入less文件還是less中@import引入less文件都會執(zhí)行所有的loader

{

? ? ? ? test: /\.less$/,

????????loader: [

????????????'style-loader',

? ? ? ? ? ? {

? ? ? ? ? ? loader:'css-loader',

? ? ? ? ? ? options:{

? ? ? ? ? ? ? ? ? ? importLoaders:2

????????????????????}

????????????},

????????????'less-loader',

????????????'postcss-loader']

? ? ? }

@5.樣式模塊化:防止樣式耦合、沖突

在js中引入的less是全局的,因此可以使用模塊化css(即該css在特點的模塊內(nèi)有效)

配置options中的modules

{

? ? ? ? test: /\.less$/,

????????loader: [

????????????'style-loader',

? ? ? ? ? ? {

????????????loader:'css-loader',

? ? ? ? ? ? options:{

????????????????????importLoaders:2,

? ? ? ? ? ? ? ? ? ? modules:true,//

????????????????????}

????????????},

????????????'less-loader',

????????????'postcss-loader']

? ? ? }

使用:

import style from ‘ /css路徑’

img.classList.add(style.avatar)

11.使用loader打包靜態(tài)資源【字體篇】

file-loader 和 url-loader 可以接收并加載任何文件,然后將其輸出到構建目錄

字體配置使用file-loader 進行配置

12.使用 plugins 讓打包更便捷

1.安裝: npm install html-webpack-plugin -D

2.使用:var HtmlWebPackPlugin = require('html-webpack-plugin');//引入

3.在webpack.config.js中配置:plugins:[]

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

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