vue官方提供了幾個vue cli的模版,但都單頁面模版,然而在真實的業務場景下仍是有多頁面模版的需求,百度和google上都能搜索到很多單頁面模版改多頁面模版的文章,可是沒有現成的模版能夠直接用,並且多頁面模版頁面多了以後,首次構建的速度真的很慢,沒法忍受。這裏我fork了官方的單頁面webpack模版,並作了動態構建的優化。html
//默認全局安裝vue-cli
vue init xyc-cn/webpack yourProject
cd yourProject
npm run dev
複製代碼
訪問 http://localhost:8088/pages/module/index.html 會看到熟悉的官方帶v-router的webpack模版頁面vue
訪問 http://localhost:8088/pages/module/detail.html 是我寫的一個示例簡單頁面webpack
多頁面構建的原理並不複雜。大概流程是這樣以下git
隨着業務的發展,項目會無限地膨脹,開發構建速度慢的問題會愈來愈嚴重,博主的項目有幾十個頁面,每一個npm run dev都到等待幾十秒時間。會讓人很抓狂。理想的狀況是,npm run dev的時候,只構建一個頁面,每次訪問到新頁面的時候,再從新構建這個新頁面的內容。這個時候express中間件webpack-dev-middleware派上用場了,經過它咱們能夠實現上述的理想構建方案。流程是這樣的:github
//first run only build one entry js buddle
let keyList = Object.keys(devConfig.entry), newEntry = {}
keyList.forEach(function (v, i) {
if (i === 0) {
newEntry[v] = [devConfig.entry[v], 'webpack-hot-middleware/client']
}
});
devConfig.entry = newEntry;
複製代碼
app.use(function (req, res, next) {
let reg = req.url.match(/pages\/(\w+)\/(\w+)\.html/);
if (reg) {
if (fs.existsSync(pathTo.join(process.cwd(), `./src/pages/${reg[1]}/${reg[2]}/v_entry.vue`))) {
if (!devConfig.entry[`pages/${reg[1]}/${reg[2]}/v_entry`]) {
devConfig.entry[`pages/${reg[1]}/${reg[2]}/v_entry`] = true;
//add new entry
complier.apply(new MultiEntryPlugin(process.cwd(),
[`./src/pages/${reg[1]}/${reg[2]}/v_entry`, 'webpack-hot-middleware/client'],
`pages/${reg[1]}/${reg[2]}/v_entry`));
//force build
webpackDevMiddlewareInstance.invalidate()
}
} else {
res.end('pages not found');
return;
}
}
next();
});
複製代碼
最後看下效果,初次構建,只構建了detail頁面的js web
訪問了 http://localhost:8088/pages/module/index.html 會動態添加入口而且構建項目github : github.com/xyc-cn/webp…vue-cli
參考資料: Webpack實戰 - 使用動態 entry 改善調試體驗express