項目結構以下:css
project
|- bulid <!-- 這個目錄是自動生成的--> |- public |- css |- js |- page1.html <!-- 插件生成的html文件--> |- page2.html <!-- 插件生成的html文件--> ... |- public/ <!-- 存放字體、圖片、網頁模板等靜態資源--> |- src <!-- 源碼文件夾--> |- components/ |- css/ |- js/ |- page1.js <!-- 每一個頁面惟一的VUE實例,需綁定到#app--> |- page2.js <!-- 每一個頁面惟一的VUE實例,需綁定到#app--> ... |- package.json |- package-lock.json |- README.md
public文件夾存放一些靜態文件,src文件夾存放源碼。每一個頁面經過一個入口文件(page1.js,page2.js,..)生成vue實例,掛載到插件生成的html文件的#app元素上。html
npm install
在webpack4中使用optimization.splitChunks進行分割.
const path = require('path'); module.exports = { // ... 省略其餘內容 optimization:{ runtimeChunk:{ name:'./js/runtime' }, splitChunks:{ // 避免過分分割,設置尺寸不小於30kb //cacheGroups會繼承這個值 minSize:30000, cacheGroups:{ //vue相關框架 main:{ test: /[\\/]node_modules[\\/]vue[\\/]/, name: './js/main', chunks:'all' }, //除Vue以外其餘框架 vendors:{ test:/[\\/]node_modules[\\/]?!(vue)[\\/]/, name: './js/vendors', chunks:'all' }, //業務中可複用的js extractedJS:{ test:/[\\/]src[\\/].+\.js$/, name:'./js/extractedJS', chunks:'all' } } } } };
runtimeChunk包含了一些webapck的樣板文件,使得你在不改變源文件內容的狀況下打包,哈希值仍然改變,所以咱們把他單獨提取出來,點這兒瞭解更多。
cacheGroups用於提取複用的模塊,test會嘗試匹配(模塊的絕對路徑||模塊名),返回值爲true且知足條件的模塊會被分割。知足的條件可自定義,好比模塊最小應該多大尺寸、至少被導入進多少個chunk(即複用的次數)等。默認在打包前模塊不小於30kb才被會分割。
在package.json里加入
"sideEffects":[".css",".less","*.sass"]
複製代碼該數組以外的文件將會受到樹抖動的影響——未使用的代碼將會從export導出對象中剔除。這將大大減小無用代碼。若是樹抖動對某些文件具備反作用,就把這些文件名放進數組以跳過此操做。css文件(包括.less,.sass)都必須放進來,不然會出現樣式丟失。
public用於存放靜態資源,打包後也會在build/下建立一個同名文件夾,裏面存放的是public會被使用到的資源。若是在.css文件裏引用了public裏的資源,如圖片,添加url的時候要使用絕對路徑:
<!-- src/css/page1.css --> .bg-img { background-image:url(/public/images/1.jpg) }
複製代碼這樣經過 http/https 打開的時候就能正常使用,若是是以文件形式打開(好比打包後雙擊page1.html),會發現瀏覽器顯示沒法找到資源。經過導入圖片做爲變量引用(import name from path),既可以使用絕對路徑,也可以使用相對路徑。