前言
大家好喲,這是第四篇面試官篇,估計還有個七八十篇面試文章(前端苦命)。
這篇文章介紹了webpack核心概念以及如何使用。
開始吧!
概念
webpack的核心概念只要記住下面四個就夠用了(除非大佬是webpack配置工程師)。
- 入口
- 出口
- loader
- 外掛
-
入口
module.exports = {
entry: './src', //單入口
// or
entry: [
'./src', //多入口
'/src2',
],
// or
entry: {
main: './src', //物件寫法的單入口簡寫
}
//or
entry: {
app: './src/index.js', //物件寫法的第三方庫寫法
vendors: './src/script/moment.js'
}
// or
entry: {
page1: './src/page1.js',
page2: './src/page2.js',
page3: './src/page3.js',
}
}
複製程式碼
其實入口很簡單,webpack要打包你的專案,那你的專案主程式碼擺放在哪個檔案呢?
比如vue,那就是src,懟到entry引數上,webpack就知道要去哪裡打包專案了。
-
output
module.exports = {
/*
output接受物件屬性,引數為
filename: 打包後的檔名
path: 打包後所需匯出的路徑
*/
output: {
filename: 'index.js',
path: path.resolve(__dirname, '/dist')
}
// or 多入口
entry: {
app: './src/index.js',
vendors: './src/script/moment.js'
},
output: {
filename: '[name].js',
path: __dirname + 'dist'
}
}
複製程式碼
出口和入口一樣簡單,顧名思義,專案主程式碼被webpack打包完,要在哪裡匯出呢? 比如vue, 那就是dist,懟到output引數裡檔名和路徑,搞定。
-
Loader
loader看名字意思就是載入器,主要用於對模組的原始碼進行轉換。
module.exports = {
module: {
rules: [
{ test: /\.ts$/, use: 'ts-loader' }
]
}
};
複製程式碼
如上程式碼,我們載入了一個ts的loader,它會幫助webpack把我們專案中的typescript檔案轉成javascript檔案。
-
外掛
module.exports = {
plugins: [
new HtmlWebpackPlugin()
]
};
複製程式碼
外掛的話算是webpack最酷的東西了吧,碰到麻煩的專案難題,可以自己寫個外掛匯入到webpack,完美搞定。
在自己的專案中使用webpack
假設俺們有個小專案,想要進一步的優化載入,壓縮程式碼之類的,我們可以自己寫一個webpack配置項。
首先,我們有一個使用typesciprt、scss的專案有,需要使用gzip壓縮程式碼,我們可以這樣配置。
const CompressionWebpackPlugin = require('compression-webpack-plugin');
module.exports = {
//入口,出口如上面的教程,只要確定你的主要程式碼檔案和你編譯後倒出的位置就可以。
entry: './pages',
output: {
filename: 'index',
path: path.resolve(__dirname, '/dist')
},
moludes: [
rules: [
{
test: /\.scss$/,
use: [
{
loader: "sass-loader" // 將 Sass 編譯成 CSS
}
]
},
{
test: /\.ts$/,
use: [
{
loader:"ts-loader" // 將ts檔案編譯成javacsript
}
]
}
]
],
plugins:[
new CompressionWebpackPlugin({
asset: '[path].gz[query]', //替換檔案路徑和名字
algorithm: 'gzip',//開啟壓縮
test: new RegExp(
'\\.(js|css)$' //壓縮js檔案和css檔案
),
threshold: 10240,//只處理比這個值大的資源(位元組)。
minRatio: 0.8 //只有壓縮率比這個值小的資源才會被處理
})
]
};
複製程式碼
這樣就完成啦,其實webpack很強大,等有空了以後會發深入webpack的文章,比如說自己寫loader,寫外掛之類的。
等等好像又跑題了。
作者自己對這個問題的解答如下:
- 告訴面試大佬,webapck的四個核心概念,並介紹一些其他的模組,例如mode,依賴圖的概念等等。
- 介紹幾個webpack的外掛,如壓縮gzip、如何處理dev中的console.log的模組等等。
- 你也可以說說自己在寫外掛或者loader時碰到的問題,如何解決的。
好了這篇需要講的東西已經結束了。
面試系列第一篇: 面試官:你知道Callback Hell(回撥地獄)嗎?
面試系列第二篇: 面試官:react和vue有什麼區別嗎?
面試系列第三篇: 面試官:你瞭解es6的知識嗎?