Vue如何实现多页面配置以及打包方式

作者:久居我心你却从未交房租 时间:2024-05-02 17:09:11 

为什么会用多页面

在开发时,对于同一类型的多网站,多页面大大节省开发时间,只需要配置一次就可以实现多次开发变成单次开发,同时一个包就可以展示一整个网站

如何在vue.config.js配置多页面信息

多页面打包会打包多个.html文件,根据.html配置跳转地址就可以了 

目录(四个页面)

Vue如何实现多页面配置以及打包方式

配置打包相关

//引入打包组件
const FileManagerPlugin = require('filemanager-webpack-plugin')
//配置打包信息
const fs = require('fs')
const path = require('path')
const FileManagerPlugin = require('filemanager-webpack-plugin')
const productionDistPath = './productionDist'
// 是否打包
const isProduction = process.env.NODE_ENV === 'production'
// 打包环境变量
const envType = process.env.ENV_TYPE || 'prod'
module.exports = {
// 打包生成压缩包
     const fileManagerPlugin = new FileManagerPlugin({
       //初始化 filemanager-webpack-plugin 插件实例
       events: {
         onEnd: {
           delete: [
             //首先需要删除项目根目录下的dist.zip
             productionDistPath
           ],
           archive: [
             //然后我们选择dist文件夹将之打包成dist.zip并放在根目录
             {
               source: './dist',
               destination: getCompressionName()
             }
           ]
         }
       }
     })
     config.plugins.push(fileManagerPlugin)
}
// 获取打包压缩包路径
function getCompressionName() {
 try {
   const projectName = JSON.parse(fs.readFileSync('package.json')).name
   return `${productionDistPath}/${projectName}-${new Date().getTime()}-${envType}.zip`
 } catch (e) {
   return `${productionDistPath}/dist.zip`
 }
}
function resolve(dir) {
 return path.join(__dirname, dir)
}

配置多页面相关

//定义多页面路径
const pagesArray = [
 {
   pagePath: 'applications',
   pageName: '名称',
   chunks: ['chunk-element-plus']
 },
 { pagePath: 'index', pageName: '名称' },
 {
   pagePath: 'uiLibrary',
   pageName: '名称',
   chunks: ['chunk-element-plus', 'chunk-ant-design-vue']
 },
 {
   pagePath: 'visualizationLibrary',
   pageName: '名称'
 }
]
const pages = {}
pagesArray.forEach(item => {
 const itemChunks = item.chunks
   ? [item.pagePath, ...item.chunks]
   : [item.pagePath]
 pages[item.pagePath] = {
   entry: `src/pages/${item.pagePath}/main.js`,
   template: 'public/index.html',
   filename: `${item.pagePath}.html`,
   title: item.pageName,
   chunks: ['chunk-vendors', 'chunk-common', ...itemChunks]
 }
})
module.exports = {
 publicPath: './',
 // 多页配置
 pages,
 // lintOnSave: false,
 css: {
   loaderOptions: {
     less: {
       lessOptions: {
         javascriptEnabled: true,
         modifyVars: {
           // 'primary-color': 'red'
         }
       }
     }
   }
 },
 // 打包时不生成.map文件
 productionSourceMap: false,
 // 配置webpack
 configureWebpack: config => {
   config.resolve.alias = {
     '@': resolve('src'),
     '@index': resolve('src/pages/index'),
     '@applications': resolve('src/pages/applications'),
     '@uiLibrary': resolve('src/pages/uiLibrary'),
     '@visualizationLibrary': resolve('src/pages/visualizationLibrary')
   }
   if (isProduction) {
     config.optimization.CommonsChunkPlugin
     // 开启分离js
     config.optimization = {
       // runtimeChunk: 'single',
       splitChunks: {
         chunks: 'all',
         cacheGroups: {
           // 抽离所有入口的公用资源为一个chunk
           common: {
             name: 'chunk-common',
             chunks: 'initial',
             minChunks: 2,
             maxInitialRequests: 5,
             minSize: 0,
             priority: 1,
             reuseExistingChunk: true,
             enforce: true
           },
           // 抽离node_modules下的库为一个chunk
           vendors: {
             name: 'chunk-vendors',
             test: /[\\/]node_modules[\\/]/,
             chunks: 'initial',
             priority: 2,
             reuseExistingChunk: true,
             enforce: true
           },
           antd: {
             name: 'chunk-ant-design-vue',
             test: /[\\/]node_modules[\\/]ant-design-vue[\\/]/,
             chunks: 'all',
             priority: 3,
             reuseExistingChunk: true,
             enforce: true
           },
           element: {
             name: 'chunk-element-plus',
             test: /[\\/]node_modules[\\/]element-plus[\\/]/,
             chunks: 'all',
             priority: 3,
             reuseExistingChunk: true,
             enforce: true
           },
           echarts: {
             name: 'chunk-echarts',
             test: /[\\/]node_modules[\\/](vue-)?echarts[\\/]/,
             chunks: 'all',
             priority: 4,
             reuseExistingChunk: true,
             enforce: true
           },
           // 由于echarts使用了zrender库,那么需要将其抽离出来,这样就不会放在公共的chunk中
           zrender: {
             name: 'chunk-zrender',
             test: /[\\/]node_modules[\\/]zrender[\\/]/,
             chunks: 'all',
             priority: 3,
             reuseExistingChunk: true,
             enforce: true
           }
         }
       }
     }
     // 打包生成压缩包
     const fileManagerPlugin = new FileManagerPlugin({
       //初始化 filemanager-webpack-plugin 插件实例
       events: {
         onEnd: {
           delete: [
             //首先需要删除项目根目录下的dist.zip
             productionDistPath
           ],
           archive: [
             //然后我们选择dist文件夹将之打包成dist.zip并放在根目录
             {
               source: './dist',
               destination: getCompressionName()
             }
           ]
         }
       }
     })
     config.plugins.push(fileManagerPlugin)
   }
 }
}

总结

const fs = require('fs')
const path = require('path')
const FileManagerPlugin = require('filemanager-webpack-plugin')
const productionDistPath = './productionDist'
// 是否打包
const isProduction = process.env.NODE_ENV === 'production'
// 打包环境变量
const envType = process.env.ENV_TYPE || 'prod'
const pagesArray = [
 {
   pagePath: 'applications',
   pageName: '名称',
   chunks: ['chunk-element-plus']
 },
 { pagePath: 'index', pageName: '名称' },
 {
   pagePath: 'uiLibrary',
   pageName: '名称',
   chunks: ['chunk-element-plus', 'chunk-ant-design-vue']
 },
 {
   pagePath: 'visualizationLibrary',
   pageName: '名称'
 }
]
const pages = {}
pagesArray.forEach(item => {
 const itemChunks = item.chunks
   ? [item.pagePath, ...item.chunks]
   : [item.pagePath]
 pages[item.pagePath] = {
   entry: `src/pages/${item.pagePath}/main.js`,
   template: 'public/index.html',
   filename: `${item.pagePath}.html`,
   title: item.pageName,
   chunks: ['chunk-vendors', 'chunk-common', ...itemChunks]
 }
})
module.exports = {
 publicPath: './',
 // 多页配置
 pages,
 // lintOnSave: false,
 css: {
   loaderOptions: {
     less: {
       lessOptions: {
         javascriptEnabled: true,
         modifyVars: {
           // 'primary-color': 'red'
         }
       }
     }
   }
 },
 // 打包时不生成.map文件
 productionSourceMap: false,
 // 配置webpack
 configureWebpack: config => {
   config.resolve.alias = {
     '@': resolve('src'),
     '@index': resolve('src/pages/index'),
     '@applications': resolve('src/pages/applications'),
     '@uiLibrary': resolve('src/pages/uiLibrary'),
     '@visualizationLibrary': resolve('src/pages/visualizationLibrary')
   }
   if (isProduction) {
     config.optimization.CommonsChunkPlugin
     // 开启分离js
     config.optimization = {
       // runtimeChunk: 'single',
       splitChunks: {
         chunks: 'all',
         cacheGroups: {
           // 抽离所有入口的公用资源为一个chunk
           common: {
             name: 'chunk-common',
             chunks: 'initial',
             minChunks: 2,
             maxInitialRequests: 5,
             minSize: 0,
             priority: 1,
             reuseExistingChunk: true,
             enforce: true
           },
           // 抽离node_modules下的库为一个chunk
           vendors: {
             name: 'chunk-vendors',
             test: /[\\/]node_modules[\\/]/,
             chunks: 'initial',
             priority: 2,
             reuseExistingChunk: true,
             enforce: true
           },
           antd: {
             name: 'chunk-ant-design-vue',
             test: /[\\/]node_modules[\\/]ant-design-vue[\\/]/,
             chunks: 'all',
             priority: 3,
             reuseExistingChunk: true,
             enforce: true
           },
           element: {
             name: 'chunk-element-plus',
             test: /[\\/]node_modules[\\/]element-plus[\\/]/,
             chunks: 'all',
             priority: 3,
             reuseExistingChunk: true,
             enforce: true
           },
           echarts: {
             name: 'chunk-echarts',
             test: /[\\/]node_modules[\\/](vue-)?echarts[\\/]/,
             chunks: 'all',
             priority: 4,
             reuseExistingChunk: true,
             enforce: true
           },
           // 由于echarts使用了zrender库,那么需要将其抽离出来,这样就不会放在公共的chunk中
           zrender: {
             name: 'chunk-zrender',
             test: /[\\/]node_modules[\\/]zrender[\\/]/,
             chunks: 'all',
             priority: 3,
             reuseExistingChunk: true,
             enforce: true
           }
         }
       }
     }
     // 打包生成压缩包
     const fileManagerPlugin = new FileManagerPlugin({
       //初始化 filemanager-webpack-plugin 插件实例
       events: {
         onEnd: {
           delete: [
             //首先需要删除项目根目录下的dist.zip
             productionDistPath
           ],
           archive: [
             //然后我们选择dist文件夹将之打包成dist.zip并放在根目录
             {
               source: './dist',
               destination: getCompressionName()
             }
           ]
         }
       }
     })
     config.plugins.push(fileManagerPlugin)
   }
 }
}
// 获取打包压缩包路径
function getCompressionName() {
 try {
   const projectName = JSON.parse(fs.readFileSync('package.json')).name
   return `${productionDistPath}/${projectName}-${new Date().getTime()}-${envType}.zip`
 } catch (e) {
   return `${productionDistPath}/dist.zip`
 }
}
function resolve(dir) {
 return path.join(__dirname, dir)
}

来源:https://blog.csdn.net/weixin_42888568/article/details/124047275

标签:Vue,多页面,配置,打包
0
投稿

猜你喜欢

  • 使用Python第三方库pygame写个贪吃蛇小游戏

    2021-05-19 11:08:37
  • 基于循环神经网络(RNN)的古诗生成器

    2023-04-29 13:28:06
  • Python 如何实现变量交换

    2021-07-03 12:48:20
  • IE和Firefox的js兼容性整理

    2007-11-21 19:40:00
  • python爬取豆瓣电影排行榜(requests)的示例代码

    2022-10-16 02:18:46
  • Python面经之16个高频面试问题总结

    2022-09-10 18:36:33
  • python中正则表达式的使用方法

    2021-08-14 09:36:59
  • js省市联动效果完整实例代码

    2024-04-18 10:15:34
  • Python 如何实现文件自动去重

    2021-07-16 13:50:54
  • Script 元素 type 属性的妙用

    2011-03-07 16:13:00
  • keras.utils.to_categorical和one hot格式解析

    2023-10-03 18:27:12
  • oracle12C安装步骤(图文详解)

    2023-07-15 14:19:34
  • 如何用ASP.NET连接MS SQLServer数据库?

    2010-06-11 19:27:00
  • 使用python采集Excel表中某一格数据

    2021-11-06 21:02:26
  • linux系统使用vscode进行qt开发的过程分享

    2023-06-23 02:33:54
  • Pytorch随机数生成常用的4种方法汇总

    2022-02-07 09:25:34
  • JavaScript实现的鼠标跟随特效示例【2则实例】

    2024-04-17 09:50:27
  • 简单谈谈Python中的闭包

    2021-10-20 12:50:46
  • Python迭代器的实现原理

    2022-12-13 09:26:22
  • 查找MySQL线程中死锁的ID的方法

    2024-01-12 18:28:34
  • asp之家 网络编程 m.aspxhome.com