vue 2.0多页面开发

1、为项目添加多个入口

找到\build\webpack.base.conf.js文件:

1 module.exports = {
2   //...,
3   //vue的多页面开发:应用程序可以存在多个入口
4   entry: {
5     app: './src/main.js',
6     product: './src/product.js'
7   },
8   //...
9 }

 

2、为开发环境和生产环境配置入口对应的配置项

打开:\build\webpack.dev.conf.js

 1 const devWebpackConfig = merge(baseWebpackConfig, {
 2   //...
 3   plugins: [
 4     new webpack.DefinePlugin({
 5       'process.env': require('../config/dev.env')
 6     }),
 7     new webpack.HotModuleReplacementPlugin(),
 8     new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
 9     new webpack.NoEmitOnErrorsPlugin(),
10     // https://github.com/ampedandwired/html-webpack-plugin
11     new HtmlWebpackPlugin({
12       filename: 'index.html',
13       template: 'index.html',
14       inject: true,
15       chunks:['app']
16     }),
17     new HtmlWebpackPlugin({
18       filename: 'product.html',
19       template: 'product.html',
20       inject: true,
21       chunks:['product']
22     }),
23   //...
24   ]
25 })

打开:\build\webpack.prod.conf.js,plugins节点下面加:

 1 //...
 2 new HtmlWebpackPlugin({
 3       filename: process.env.NODE_ENV === 'testing'
 4         ? 'index.html'
 5         : config.build.index,
 6       template: 'index.html',
 7       inject: true,
 8       minify: {
 9         removeComments: true,
10         collapseWhitespace: true,
11         removeAttributeQuotes: true
12         // more options:
13         // https://github.com/kangax/html-minifier#options-quick-reference
14       },
15       // necessary to consistently work with multiple chunks via CommonsChunkPlugin
16       chunksSortMode: 'dependency',
17       chunks: ['manifest', 'vendor', 'app']
18     }),
19     new HtmlWebpackPlugin({
20       filename: process.env.NODE_ENV === 'testing'
21         ? 'product.html'
22         : config.build.product,
23       template: 'product.html',
24       inject: true,
25       minify: {
26         removeComments: true,
27         collapseWhitespace: true,
28         removeAttributeQuotes: true
29         // more options:
30         // https://github.com/kangax/html-minifier#options-quick-reference
31       },
32       // necessary to consistently work with multiple chunks via CommonsChunkPlugin
33       chunksSortMode: 'dependency',
34       chunks: ['manifest', 'vendor', 'product']
35     }),
36 //...

 

3、配置编译环境

1 build: {
2     // Template for index.html
3     index: path.resolve(__dirname, '../dist/index.html'),
4     product: path.resolve(__dirname, '../dist/product.html'),
5     //...
6 }

 

4、根目录添加product.html

后面product关联的页面入口都是这个页面。

 

5、src目录添加product.js和product.vue

product.js类似于单页面的main.js的作用

import Vue from 'vue'
import product from './product.vue'

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#product',
  render: h => h(product)
})

product.vue类似于单页面的App.vue的作用

 1 <template>
 2   <div id="prodcut">
 3     {{msg}}
 4   </div>
 5 </template>
 6 
 7 <script>
 8 export default {
 9   name: 'prodcut',
10   data () {
11     return {
12       msg: 'I am prodcut'
13     }
14   }
15 }
16 </script>

 

6、添加测试链接

App.vue添加produt.html链接

 1 <template>
 2   <div id="app">
 3     <img src="./assets/logo.png">
 4     <a href="product.html">product</a><br>
 5     <router-view/>
 6   </div>
 7 </template>
 8 
 9 <script>
10 export default {
11   name: 'App'
12 }
13 </script>
14 
15 <style>
16 #app {
17   font-family: 'Avenir', Helvetica, Arial, sans-serif;
18   -webkit-font-smoothing: antialiased;
19   -moz-osx-font-smoothing: grayscale;
20   text-align: center;
21   color: #2c3e50;
22   margin-top: 60px;
23 }
24 </style>

 

 

 7、测试

可以看到编译后的文件index.html和product.html已经分别编译了,各自作为单页面的入口:

 

编译后的js也是各自的:

 

下面是演示效果:

 

 

 

 

 

 

8、源码

https://github.com/iprometheus/vue-multipage

 

9、参考文档

http://blog.csdn.net/Tank_in_the_street/article/details/73732801

 

posted @ 2018-02-07 13:49  gudi  阅读(657)  评论(0编辑  收藏  举报