對於前端工程化,webpack一個神奇的工具,既然是個神奇的工具。那咱們保留咱們的好奇心,來聊一聊它,首先咱們要搞清楚webpack究竟是用來解決什麼問題的,而後咱們來看看它究竟是怎麼作的,最後來看看它的一些基本用法,下面就來侃一侃。css
現在web前端的業務功能愈來愈複雜,實現方式也愈來愈豐富,在web頁面開發過程當中咱們一般會引用不少第三方模塊以及一些拓展語言(stylus,Scss, JSX...)來簡化開發難度,而這些第三方模塊和一些拓展語言瀏覽器不能直接識別,因此要經過通過打包過程生成可讓瀏覽器識別的格式。就像一幢居民樓,要建起這樣一座居民樓,最基本的材料是磚、瓦、鋼筋、混凝土。而要組合這些材料造成一幢建築,確定是有必定的方法流程以及工具的,好比第一步先搭建地基,後面用塔吊不斷的在地基上疊加完善就造成了一幢建築。在這個過程當中,用到的方法流程以及工具起到的做用就相似於webpack。html
進入正題,webpack其實就是一個JavaScript模塊集成工具,同時具備壓縮文件以及優化文件結構的做用。通過webpack打包生成的bundle包,可被瀏覽器識別解析。前端
在這個過程當中,會用到一些loaders解析工具用來預處理一些模塊以及拓展語言(例如:stylus、Scss...),這些工具的配置使用都是在webpack中完成的。其中經常使用的loaders工具備:style-loader、 css-loader、 stylus-loader。webpack
原理的理解能夠參照上圖。
webpack的最核心的原理: 一、一切皆模塊 二、按需加載。web
在使用webpack以前首先要理解四個基本概念:npm
webpack要實現打包,首先咱們得指定它的入口,指定入口後,webpack纔會找出那些模塊和庫是入口起點(直接和間接)的依賴。
接下來咱們來看一個最簡單的entry的配置例子。前端工程化
webpack.base.config.js
數組
module.exports = { entry: './src/main.js' };
出口即配置打包後的輸出文件路徑,以及如何命名這些文件,默認值爲 ./dist。基本上,整個應用程序結構,都會被編譯到你指定的輸出路徑的文件夾中。你能夠經過在配置中指定一個 output 字段,來配置這些處理過程:瀏覽器
webpack.base.config.js
網絡
const path = require('path'); module.exports = { entry: './src/main.js', output: { path: path.resolve(__dirname, 'dist'), // 輸出路徑 filename: 'output.bundle.js' // 輸出文件名 } };
loader可以將非JavaScript文件轉化爲webpack識別的JavaScript文件,好比講圖片轉化爲JavaScript可調用的格式,或者將一些擴展語言文件轉化爲瀏覽器可識別的文件格式。
本質上,webpack loader 將全部類型的文件,轉換爲應用程序的依賴圖(和最終的 bundle)能夠直接引用的模塊。
在更高層面,在 webpack 的配置中 loader 有兩個目標:
webpack.config.js
const path = require('path'); const config = { output: { filename: 'my-first-webpack.bundle.js' }, module: { rules: [ { test: /\.txt$/, use: 'raw-loader' } ] } }; module.exports = config;
loader 被用於轉換某些類型的模塊,而插件則能夠用於執行範圍更廣的任務。插件的範圍包括,從打包優化和壓縮,一直到從新定義環境中的變量。插件接口功能極其強大,能夠用來處理各類各樣的任務。
想要使用一個插件,你只須要 require() 它,而後把它添加到 plugins 數組中。多數插件能夠經過選項(option)自定義。你也能夠在一個配置文件中由於不一樣目的而屢次使用同一個插件,這時須要經過使用 new 操做符來建立它的一個實例。
webpack.config.js const HtmlWebpackPlugin = require('html-webpack-plugin'); // 經過 npm 安裝 const webpack = require('webpack'); // 用於訪問內置插件 const config = { module: { rules: [ { test: /\.txt$/, use: 'raw-loader' } ] }, plugins: [ new HtmlWebpackPlugin({template: './src/index.html'}) ] }; module.exports = config;
本文基於本身學習網絡中的webpack整理的一份基本概念文檔,是本身對於webpack使用的理解總結,若有問題,煩請評論指正,共同窗習,共同進步。😁😁😁😁