// 項目結構 . |-- README.md |-- build | |-- build-test.js | |-- build.js | |-- check-versions.js | |-- dev-client.js | |-- dev-server.js | |-- utils.js | |-- vue-loader.conf.js | |-- webpack.base.conf.js | |-- webpack.dev.conf.js | |-- webpack.prod.conf.js | `-- webpack.test.conf.js |-- config | |-- dev.env.js | |-- index.js | |-- prod.env.js | `-- test.env.js |-- favicon.ico |-- index.html |-- package-lock.json |-- package.json |-- src | |-- assets | |-- components | |-- frame | |-- service | |-- views | `-- vuexStore |-- static | |-- desktop.ini | |-- test | `-- utf8-jsp |-- test | |-- e2e | `-- unit |-- yarn.lock `-- yarn.lock.bak
對比多頁應用和單頁應用(SPA),最大的不一樣點,就在於入口的不一樣css
指定打包模式,可選的值有:html
development,開發模式前端
production,生產模式vue
// \build\webpack.base.conf.js // 目的是獲取單頁面的main.js var entries = utils.getMultiEntry('./src/views/**/**/*.js'); // 得到入口js文件 entries['preJs'] = './src/assets/js/pre.js' //爲index.html引入preJs.js entries = Object.assign({'babel-polyfill':'babel-polyfill'},entries) var webpackConfig = { entry: entries }
// \build\webpack.dev.conf.js // 須要在module.exports裏使用'html-webpack-plugin'配置plugins var pages = utils.getMultiEntry('./src/views/**/**/*.html'); for (let pathname in pages) { // 配置生成的html文件,定義路徑等 var conf = { filename: pathname + '.html', template: pages[pathname], // 模板路徑 chunks: ['preJs',pathname, 'vendors', 'manifest'], // 每一個html引用的js模塊 chunksSortMode: function (chunk1, chunk2) { var order = ['preJs','vendors', pathname, 'manifest']; var order1 = order.indexOf(chunk1.names[0]); var order2 = order.indexOf(chunk2.names[0]); return order1 - order2; }, inject: true // js插入位置 }; // 須要生成幾個html文件,就配置幾個HtmlWebpackPlugin對象 module.exports.plugins.push(new HtmlWebpackPlugin(conf)); }
chunks的做用是每次編譯、運行時每個入口都會對應一個entry,若是沒寫則引入全部頁面的資源webpack
//構建生成多頁面的HtmlWebpackPlugin配置,主要是循環生成 var pages = utils.getMultiEntry('./src/views/**/**/*.html'); for (let pathname in pages) { var conf = { filename: pathname + '.html', template: pages[pathname], // 模板路徑 chunks: ['preJs','vendor',pathname], // 每一個html引用的js模塊 chunksSortMode: function (chunk1, chunk2) { var order = ['preJs','vendor',pathname]; var order1 = order.indexOf(chunk1.names[0]); var order2 = order.indexOf(chunk2.names[0]); return order1 - order2; }, inject: true, // js插入位置 hash:true }; webpackConfig.plugins.push(new HtmlWebpackPlugin(conf)); }
其中filename引用的是configindex.js裏的build,每一個頁面都要配置一個chunks,否則會加載全部頁面的資源。git
vue2.0之多頁面的開發
基於 webpack4 搭建 vue二、vuex 多頁應用框架 - 掘金
vue多頁面開發和打包的正確姿式 - 掘金github