怎么在Vue + ElementUI项目中使用webpack输出MPA ?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
<强>一。需求分析强>
为另一个项目提供可嵌入的功能单页,大部分页面使用时都是独立功能页,个别页面带有左侧边栏(相当于3 - 4个页面的整合形态),由于资源定位地址的限定,每个页面打包为单页后,入口<代码> html 代码>文件需要定制命名,且脚本和样式文件需要放在指定的路径下,公共资源地址也必须替换成特殊字符以适配母系统的调用逻辑(比如下面结构中应用<代码> jquery.min.js> 代码的路径可能是<代码> {{publicRoot}}/{{publicLib}}/jquery。minjs 代码>)。假设原工程中拥有AB这2个旧页面,现在需要开发CDE这3个页面、目录结构要求如下:
蓝色部分为旧资源,绿色部分为新开发需求。
<强>二。原方案分析强>
原方案采用Vue + ElementUI <代码> 代码>进行开发,构建过程基本是零配置的,开发效率非常高,页面风格也统一,但零配置的构建过程只能生成<代码> SPA 代码>模式的应用,所以原方案的做法是:
将构建过程中需要定制的量提取到<代码>配置。js代码>文件中进行统一管理,大致形式如下:
//config.js module.exports =, { 答:{才能 ,,,publicPath: & # 39; {{publicRoot}}/{{publicLib}} & # 39; ,,,prodFileName: & # 39; A.html& # 39; ,,,entryKey: & # 39;公共/一个# 39; ,,,entryPath: & # 39;公共//A.js& # 39; ,,}, B:{才能 ,,,//? ,,}//才能…… }
开发过程中使用统一的路由文件<代码> router.js> 代码,打包过程中在<代码> main.js> 代码中引用对应页面的<代码> XX.router.spa.js> 代码作为路由,而将其他页面注释掉,打包时传入命令行参数<代码>——关键=XXX> 代码,<代码>键> 代码值在打包脚本中被解析后从<代码>配置。js代码>中取出打包需要的设置参数,然后将目标页面打包为独立页面,其他页面虽然也在工程中,但并不参与打包。
//,入口文件src/main.js import router 得到& # 39;。/页面/C/router.spa& # 39;;//import router 得到& # 39;。/页面/D/router.spa& # 39;;//import router 得到& # 39;。/页面/E/router.spa& # 39;;
上述打包过程在使用中出现了很多问题:
- <李>
公共依赖没有剥离,vue 代码> <代码>和<代码> ElementUI> 代码会被打包进每一个单页面,使得每个打包出的<代码> index.js 代码>几乎有1.2 mb大小,这种空间浪费是没必要的。
李> <李>公共样式没有形成独立文件,这使得每当有样式细节发生变更,就需要手动将每个页面逐一进行重新出包。
李> <李>页面增多后在<代码> main.js> 代码中会有很多独立路由,如果开发中进行了跨页面修改,很可能在<代码> main.js> 代码中激活的路由为C页面路由时,打包时<代码>——关键> 代码参数的值却传成了<代码> D> 代码,这种情况并不会引起报错,但事实上构建结果确实错误的。
李> <李>由于入口文件保持<代码> main.js> 代码没有变化,所以在不同页面打包时,结果都输出在<代码> dist 代码>目录下,需要手动与母工程中的地址去匹配,操作繁琐。
李><强>三。多页面改造3步走强>
上面的问题实际上都是因为原方案将一个多页面开发需求按照单页面应用来实现而造成的,需要对自动化构建工程进行一些定制。
<强> 1。分离webpack配置强>
本例中开发环境和最终打包的主要差异在于路由上,开发中由于可能需要进行跨页面开发,可以使用单入口和独立路由,而进行生产环境构建时则需要输出多页面应用,所以首先要做的就是将原本的<代码> webpack.config.js 代码>文件拆分为<代码> webpack.base.js 代码>,<代码> webpack.dev.js 代码>,<代码> webpack.prod.js 代码>三个文件,<代码> webpack.base.js> 代码为环境无差别的配置,然后依据构建模式的不同,使用webpack-merge插件将环境相关的配置与基本配置进行合并:
/* webpack.base.js示例*/const argv =,要求(& # 39;yargs-parser& # 39;) (process.argv.slice (2)); const env_short =, argv.env.all ?, & # 39;所有# 39;,:,argv.p ?, & # 39;促使# 39;:& # 39;dev # 39;; const webpackConfig =,要求('/config/webpack。$ {env_short} ');//根据- p属性加载webpack的dev配置或促使配置 const merge =,要求(& # 39;webpack-merge& # 39;);//基本配置 const baseConfig =, {//....才能 }//输出合并后的配置 module.exports =,合并(baseConfig, webpackConfig);怎么在Vue + ElementUI项目中使用webpack输出MPA