不少時候利用
React
、Vue
這類UI框架,爲了快速開發項目,直接使用了官方推薦vue-cli
或者create-react-app
的腳手架。近段時間研究了不少webpack
打包文章和資料。本身動手搭建了一個Vue
項目腳手架。javascript
這個腳手架時基於webpack 4.36.1
,配置部分可能跟webpack3
版本有衝突,過程之中會提出。如今主要webpack
配置主要分打包環境和開發環境,分別對應webpack.dev.conf.js
和webpack.prod.conf.js
。後面會利用webpack-merge
把兩部分公用的環境配置抽取到webpaack.base.conf.js
。其中dist
目錄下是打包環境打包的chunk
包。css
腳手架Github
地址:https://github.com/Harhao/webpack
html
|-- build
| |-- webpack.base.conf.js
| |-- webpack.dev.conf.js (開發環境webpack配置文件)
| `-- webpack.prod.conf.js (打包環境webpack配置文件)
|-- config
| `-- index.js(webpack一些配置,例如webpack-dev-server)
|-- dist
| |-- framework_180dff6fd8b94a15.js(抽取的公共類庫,vue,vue-router,vuex等)
| |-- index.html
| |-- main_180dff6fd8b94a15.js(打包的js文件)
| |-- main_fdef942b.css(打包的css文件)
| `-- vendors~main_180dff6fd8b94a15.js
|-- package.json(項目依賴及npm scripts定義)
|-- public
| `-- index.html(掛載文件)
`-- src (vue開發目錄)
|-- App.vue
|-- main.js
|-- router
| `-- index.js
`-- views
|-- admin
| `-- index.vue
`-- login
`-- index.vue
複製代碼
webpack.dev.conf.js
主要是提供開發單頁應用時的打包配置文件,包含了熱更新、vue
文件處理、打包後chunk
包注入等功能。開發環境配置文件沒有添加過多的其餘plugin
,保留了基本的一些開發必要的環境配置。下面會詳細說明一些插件和配置信息的做用。vue
webpack
只提供了js
的模塊打包功能。像其餘.vue
,.jsx
,·.tsx
,scss
等後綴的文件,主要依賴於各種的loader
負責處理,而後進行打包操做。在平常利用vue
進行開發中,主要使用到單頁文件模板開發(即.vue
後綴的模板),webpack
沒法對該類文件處理。因此須要vue-loader
對該類文件進行轉換。css的預編譯scss
須要sass-loader
和node-sass
支持,scss
文件處理loader
執行順序是從後面往前執行的,sass-loader
,css-loader
,style-loader
。java
對於處理es6
語法,須要babel-loader
轉換編譯,而babel-loader
須要@babel/core
,@babel/preset-env
。如今用的babel-loader
是8.0.6
版本,須要比較新版本的@babel/core
,@babel/preset-env
配合使用。在根目錄下建立一個.babelrc
文件,內容以下:node
{
"presets": [
"@babel/preset-env"
]
}
複製代碼
output
字段設置打包文件輸出路徑配置。filename
是輸出文件命令,其中name
,hash
都是內置的變量名,還包括id
和chunkhash
打包內容哈希值。path
是輸出路徑指定,若是採起相對路徑,是相對於當前運行的路徑。這裏採起的經過path.resolve
來配置路徑。其中publicPath
字段是配置發佈到線上資源的 URL 前綴,爲string 類型,這裏若是設置了vue-router
的base
,須要對此字段進行配置,否則會出現資源路徑問題。react
經過webpack
打包文件,總不能手動把chunk
引入index.html
,這個社區提供了html-webpack-plugin
爲咱們提供手動和自動注入打包文件路徑,感謝開源社區提升生產力。devtool
設置開發環境生成.map
文件,方便咱們定位開發錯誤。到如今基本已經能夠正常運行打包vue
開發了。不過每一次咱們修改開發內容,還得從新打包一次,多麻煩。webpack
平常開發過程當中,須要更新查看修改的內容,開源插件webpack-dev-server
爲咱們提供了一個本地的express
服務,熱更新修改的內容。提升咱們的效率。有關webpack-dev-server
的配置放在config/index.js
中,以下所示:ios
其中resolve
字段是配置配置 Webpack
怎樣尋找模塊所對應的文件。開發中常常遇到跨越狠多層級去import
所須要的模塊,這裏就可使用resolve.alias
配置別名定義一個目錄,不用太長路徑,相似於import api from '../../../api
這類出現。git
webpack
配置生產環境,須要對css
文件提取,js
文件壓縮等;一些公用類庫文件進行提取,相似於vue,vue-router,vuex,axios
等
webpack4
已經廢棄了 extract-text-webpack-plugin
對css
文件的提取,建議使用mini-css-extract-plugin
。與webpack.dev.conf.js
不一樣之處在於,由mini-css-extract-plugin
替代style-loader
。其中filename,
定義抽取的css
的名稱。
clean-webpack-plugin
是清除每次打包chunk
包。每次npm run build
都會產生打包文件,因此使用clean-webpack-plugin
很方便清除多餘的文件。clean-webpack-plugin
使用很簡單。
uglifyjs-webpack-plugin
對打包的js
文件進行壓縮。minimizer
中經過test
正則表達式匹配js
後綴對的文件進行壓縮。
webpack3
以前使用CommonsChunkPlugin
進行分包。在webpack4
中正式提供了optimization.splitChunks
進行分包。在entry
中設置了入口文件framework:["vue","vue-router","vuex"]
須要分包的文件。在optimization.splitChunks
定義抽取的文件。
vue
的項目中,使用了vue-router
,vuex
依賴包,運行效果以下所示:
後面關於打包構建速度的優化,能夠查看下一篇webpack4自定義腳手架優化。