前言
大家好喲,這是第四篇面試官篇,估計還有個七八十篇面試文章(前端苦命)。
這篇文章介紹了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的知識嗎?
如果您有收獲或者疑問請在下方評論,求贊!謝謝觀看到這里。
鏈接:https://juejin.im/post/5cafe9c1e51d456e3267e3ea