Webpack基礎(一)

模塊打包工具,可壓縮,優(yōu)化代碼格式
支持大部分模塊規(guī)范:COMMONJS、AMD(require.js)、CMD(sea.js)、ES6模塊

核心

entry:一個或多個入口,一般是js文件,通過遞歸找到依賴文件,多入口文件的entry通過鍵值對的形式輸入

output:出口文件及位置

loader:webpack本身只能解析js/json文件,loader使webpack可以解析打包其他格式的文件,在module.rules中配置,test指定匹配規(guī)則,use指定使用的loader

常見的loader
css-loader: 支持.css文件的加載和解析,轉換成commonjs對象
style-loader: 將樣式通過style標簽插入到head中
url-loader: 內部使用了file-loader,可以自動將較小文件打包成base64
file-loader: 圖片、字體的打包
raw-loader: 將文件以字符串的形式導入(base64)
babel-loader: 轉換es5以上版本的新特性語法
vue-loader
postcss-loader
image-loader
sass-loader/less-loader: 將sass/less文件轉換成css文件
sass-resources-loader: 提取sass中的全局變量
ts-loader: 將typeScript轉換成js
thread-loader: 多進程打包css和js

plugin:插件,擴展功能,資源管理,環(huán)境變量注入,作用于整個構建過程,放到plugins數組中

常見的plugin
define-plugin:定義環(huán)境變量
commons-chunk-plugin:提取公共代碼
clean-webpack-plugin:清理構建目錄
extract-text-webpack-plugin:將css從bundle文件里提取成一個獨立的css文件
mini-css-extract-plugin:將css提取成一個單獨的css文件,支持webpack4,使用link標簽的方式插入到HTML中
copy-webpack-plugin:將文件或文件夾拷貝到構建的輸出目錄
html-webpack-plugin:創(chuàng)建html文件去承載輸出的bundle
uglify-js-webpack-plugin:壓縮混淆js代碼
zip-webpack-plugin:將打包的資源生成zip文件
web-webpack-plugin:為單頁應用輸出html,比前者好用
hot-module-replacement-plugin:熱更新,webpack自帶,在devServer中配置hot:true會自動引入這個插件,具體作用:將HMR runtime注入到webpack打包的bundle.js中,使其可以與HMR server建立websocket通信,從而實現熱更新

mode(webpack4新增字段)
可選值

  1. development: 設置process.env.NODE_ENV: development,開啟NamedChunksPlugin和NamedModulesPlugin
  2. production: 設置process.env.NODE_ENV: production,開啟FlagDependencyUsagePlugin, FlagIncludedChunksPlugin, ModuleConcatenationPlugin, NoEmitOnErrorsPlugin, OccurrenceOrderPlugin, SideEffectsFlagPlugin, TerserPlugin
  3. none: 不開啟任何優(yōu)化項

文件指紋

打包后輸出文件名的后綴,用于版本管理,發(fā)布時僅需要發(fā)布更改過的內容,沒有更改過的使用緩存
生成:
hash: 只要項目有改動,hash就會變
contentHash:根據文件內容定義,文件內容變動,他就會變,常見的場景:一個js文件引用了css文件,css文件一般使用contentHash
chunkHash:不同的entry會有不同的chunkHash,chunk內容改變,他就會變

占位符名稱:
[ext]: 資源后綴名
[name]: 文件名
[path]: 文件的相對路徑
[folder]: 文件夾
[contenthash]: hash值,md5加密,長度值為32位,[chunkhash:8]表示取前8位
[hash]: hash值

js的文件指紋設置:
output.filename: '[name]_[chunkhash:8].js'
css的文件指紋設置:
使用MiniCssExtraPlugin提成單獨的文件再設置,與style-loader功能互斥,不能同時使用
new MiniCssExtractPlugin({
filename: [filename]_[contenthash:8].css
})
圖片的文件指紋設置:在file-loader中設置
loader: "file-loader",
options: {
name: 'img/[name][hash:8].[ext]'
}

名詞解釋:
bundle:打包的文件
chunk:代碼塊,由多個模塊組成
module:模塊,一個文件

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

相關閱讀更多精彩內容

  • 核心概念 entry、output、loader、plugins、mode entry entry含義:用來指定打...
    付出的前端路閱讀 425評論 0 0
  • 針對webpack,是大家(前端開發(fā))在日常的開發(fā)中都會遇見的,通過書寫的方式輸出,學習到的關于前端工程化的小知識...
    曾經丶記憶的風景閱讀 1,299評論 0 1
  • webpack webpack是一種前端資源構建工具,一個靜態(tài)模塊打包器,在webpack看來,前端所有資源文件都...
    安掌門dear閱讀 940評論 0 1
  • 模塊化 CommonJS CommonJS是一種使用廣泛的 JavaScript模塊化規(guī)范,核心思想是通過 req...
    小小的白菜閱讀 641評論 0 12
  • 一、五個核心概念(入口Entry、輸出Output、Loader、插件Plugins、模式(Mode) 入口(En...
    老衲不生氣閱讀 542評論 0 0

友情鏈接更多精彩內容