1. 先使用vue-cli 执行vue init webpack myapp初始化项目
    2. 进入/build/webpack.base.conf.js文件中,在entry项配置多入口:
    1. entry: {
    2. home: './src/page/home/main.js',
    3. result: './src/page/result/main.js',
    4. vote: './src/page/vote/main.js'
    5. }
    1. 修改开发环境中的plugins,进入/build/webpack.dev.conf.js文件:
    1. // 预热场/主会场
    2. new HtmlWebpackPlugin({
    3. filename: 'home.html',
    4. template: 'home.html',
    5. inject: true,
    6. chunks: ['home']
    7. }),
    8. // 投票页
    9. new HtmlWebpackPlugin({
    10. filename: 'vote.html',
    11. template: 'vote.html',
    12. inject: true,
    13. chunks: ['vote']
    14. }),
    15. // 结果页
    16. new HtmlWebpackPlugin({
    17. filename: 'result.html',
    18. template: 'result.html',
    19. inject: true,
    20. chunks: ['result']
    21. }),
    22. new FriendlyErrorsPlugin()

    chunks对应的是webpack.base.conf.js中entry对应的名字,作用是每次编译运行时一个入口对应一个entry,如果没写则引入所有页面资源。

    1. 配置生产环境,进入/config/index.js文件,修改build属性配置项:
    1. build: {
    2. home: path.resolve(__dirname, '../dist/home.html'),
    3. vote: path.resolve(__dirname, '../dist/vote.html'),
    4. result: path.resolve(__dirname, '../dist/result.html')
    5. }
    1. 然后进入/build/webpack.prod.conf.js文件,添加HtmlWebpackPlugin:
    1. new HtmlwebpackPlugin({
    2. filename: config.build.home,
    3. template: 'home.html',
    4. inject: true,
    5. minify: {
    6. removeComments: true,
    7. collapseWhitespace: true,
    8. removeAttributeQuotes: false
    9. },
    10. chunksSortMode: 'dependency',
    11. chunks: ['manifest', 'vendor', 'home']
    12. }),
    13. new HtmlwebpackPlugin({
    14. filename: config.build.vote,
    15. template: 'vote.html',
    16. inject: true,
    17. minify: {
    18. removeComments: true,
    19. collapseWhitespace: true,
    20. removeAttributeQuotes: false
    21. },
    22. chunksSortMode: 'dependency',
    23. chunks: ['manifest', 'vendor', 'vote']
    24. }),
    25. new HtmlwebpackPlugin({
    26. filename: config.build.result,
    27. template: 'result.html',
    28. inject: true,
    29. minify: {
    30. removeComments: true,
    31. collapseWhitespace: true,
    32. removeAttributeQuotes: false
    33. },
    34. chunksSortMode: 'dependency',
    35. chunks: ['manifest', 'vendor', 'result']
    36. })

    最终的项目目录结构是:

    1. ├── README.md 项目介绍
    2. ├── home.html 主会场/预热场页面
    3. ├── vote.html 主会场投票页面
    4. ├── result.html 主会场入口页面
    5. ├── build 构建脚本目录
    6. ├── build-server.js 运行本地构建服务器,可以访问构建后的页面
    7. ├── build.js 生产环境构建脚本
    8. ├── dev-client.js 开发服务器热重载脚本,主要用来实现开发阶段的页面自动刷新
    9. ├── dev-server.js 运行本地开发服务器
    10. ├── utils.js 构建相关工具方法
    11. ├── webpack.base.conf.js wabpack基础配置
    12. ├── webpack.dev.conf.js wabpack开发环境配置
    13. └── webpack.prod.conf.js wabpack生产环境配置
    14. ├── config 项目配置
    15. ├── dev.env.js 开发环境变量
    16. ├── index.js 项目配置文件
    17. ├── prod.env.js 生产环境变量
    18. └── test.env.js 测试环境变量
    19. ├── mock mock数据目录
    20. └── hello.js
    21. ├── package.json npm包配置文件,里面定义了项目的npm脚本,依赖包等信息
    22. ├── src 源码目录
    23. ├── main.js 入口js文件
    24. ├── app.vue 根组件
    25. ├── components 公共组件目录
    26. └── title.vue
    27. ├── assets 资源目录,这里的资源会被wabpack构建
    28. └── images
    29. └── logo.png
    30. ├── routes 前端路由
    31. └── index.js
    32. ├── store 应用级数据(state
    33. └── index.js
    34. └── views 页面目录
    35. ├── hello.vue
    36. └── notfound.vue
    37. ├── static 纯静态资源,不会被wabpack构建。
    38. └── test 测试文件目录(unit&e2e
    39. └── unit 单元测试
    40. ├── index.js 入口脚本
    41. ├── karma.conf.js karma配置文件
    42. └── specs 单测case目录
    43. └── Hello.spec.js