需求

一个平台P,包含产品a、b、c、d、e。各产品UI样式风格统一,且会用到公共配置(HOST、是否添加埋点js)、组件(头部导航、表格、搜索框)、方法(请求拦截、生成UUID)。

现状:由于历史遗留原因,各产品为独立SPA、各自维护,配置、组件也都自成一体,只是大概样式上保持了一致,但细节(比如同一面包屑样式,左边距5px、8px都有)都不一致。

这种情况下,改组件、改配置都得一改改多个地方,且有些项目是vue-cli2、有些是vue-cli3,项目间依赖包的版本也不一致,维护起来非常不友好。

目标:整合各产品单页应用为MPA,提取公共文件(主题、配置、组件、方法),减少规范性东西的维护成本。

目录结构对比

整合前

bds-bank-fe

│ README.md

│// 静态资源输出目录

└───dist

│ └───index.html + static // 平台首页

│ └───label // 产品a

│ │ └───index.html + static

│ └───metrics // 产品b

│ └───service // 产品c

│ └───help // 产品d

│// 项目路径

└───help-center // 产品d

└───portal-page // 平台首页

└───service-doc // 产品c

└───unify-label // 产品a

└───unify-metrics // 产品b

│ └───build

│ └───config

│ └───src

整合后

│// 静态资源输出目录

└───dist

│ └───index.html

│ └───label.html

│ └───metric.html

│ └───service.html

│ └───stocktake.html

│ └───css

│ └───js

│ └───img

├── public

│ └───favicon.ico

│ └───index.html

│// 项目路径

├── src

│   └── assets

│   └── components

│   ├── pages

│   ├── index

│   ├── label

│   ├── metric

│   ├── service

│   ├── stocktake

实现

vue-cli 3.0官方支持多页,重点在于vue.config.js文件中pages这个配置项,每个页面单独配置entry、template、filename等。pages配置说明

// 官网示例如下

module.exports = {

pages: {

index: {

// page 的入口

entry: 'src/index/main.js',

// 模板来源

template: 'public/index.html',

// 在 dist/index.html 的输出

filename: 'index.html',

// 当使用 title 选项时,

// template 中的 title 标签需要是

title: 'Index Page',

// 在这个页面中包含的块,默认情况下会包含

// 提取出来的通用 chunk 和 vendor chunk。

chunks: ['chunk-vendors', 'chunk-common', 'index']

},

// 当使用只有入口的字符串格式时,

// 模板会被推导为 `public/subpage.html`

// 并且如果找不到的话,就回退到 `public/index.html`。

// 输出文件名会被推导为 `subpage.html`。

subpage: 'src/subpage/main.js'

}

}

Step1: 创建新项目

选择需要的Babel、Router、Vuex、eslint...

具体步骤参考官网:创建一个项目

Step2: 修改配置文件vue.config.js

在根目录下新建public文件夹,包含favicon.ico和index.html两个文件。

index文件内容如下:

P-公共服务平台

We're sorry but page doesn't work properly without JavaScript enabled. Please enable it to continue.

然后,在根目录下新建vue.config.js

const glob = require('glob')

const path = require('path')

const resolve = (dir) => path.join(__dirname, dir)

const PAGES_PATH = './src/pages/*/*.js'

module.exports = {

pages: setPages(),

// TODO:以下内容非生成多页应用必须配置

lintOnSave: true,

productionSourceMap: false,

chainWebpack: config => {

/**

* 自动化导入文件

*/

const types = ['vue-modules', 'vue', 'normal-modules', 'normal']

types.forEach(

type => addStyleResource(config.module.rule('less').oneOf(type)))

/**

* 添加别名

*/

config.resolve.alias

.set('@index', resolve('src/pages/index'))

.set('@label', resolve('src/pages/label'))

.set('@metrics', resolve('src/pages/metric'))

.set('@service', resolve('src/pages/service'))

.set('@stocktake', resolve('src/pages/stocktake'))

/**

* 菜单icon处理为svg-sprite

*/

config.module

.rule('svg')

.exclude

.add(resolve('src/assets/icons/menus'))

.end()

config.module

.rule('svg-sprite-loader')

.test(/\.svg$/)

.include

.add(resolve('src/assets/icons/menus')) // 处理目录

.end()

.use('svg-sprite-loader')

.loader('svg-sprite-loader')

.options({

symbolId: 'icon-[name]'

})

}

}

/**

* 组装页面

*/

function setPages () {

let pages = {}

glob.sync(PAGES_PATH).forEach(filepath => {

let fileList = filepath.split('/')

let fileName = fileList[fileList.length - 2]

pages[fileName] = {

entry: filepath,

template: 'public/index.html',

filename: `${fileName}.html`,

// title:

chunks: ['chunk-vendors', 'chunk-common', fileName]

}

})

return pages

}

/**

* 注入公共less

* @param rule

*/

function addStyleResource (rule) {

rule.use('style-resource')

.loader('style-resources-loader')

.options({

patterns: [

path.resolve(__dirname, 'src/assets/styles/variable.less')

]

})

}

Step3: 拷贝原项目src目录至pages下,大概长这样

Step4: 各产品原项目下package.json依赖包都挪到根目录下package.json,重新安装

PS:由于依赖向上升级,某些老版本依赖包可能会存在升级引发的问题,需要细心走查一遍。这里由于业务不一样,就不详细赘述了

然后npm start,完美启动~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

vuecli3修改html,详解vue-cli3多页应用改造相关推荐

  1. node怎么解析vue代码_vue中node_modules中第三方模块的修改使用详解

    最近用vue在做一个项目,github用上找了一个日历插件,intall到了本项目中,配好以后发现插件的样式风格和项目总体风格相差较大,所以就像这个改一下插件风格, 第一种方法:我直接在父组件中将st ...

  2. vue-cli3.0配置详解

    这次给大家带来vue-cli3.0配置详解,使用vue-cli3.0配置的注意事项有哪些,下面就是实战案例,一起来看一下. 新建项目 1 2 3 4 5 6 7 8 # 安装 npm install ...

  3. vue-cli3全面配置详解

    vue-cli3全面配置详解 vue-cli3-config 创建项目 配置环境变量 通过在package.json里的scripts配置项中添加–mode xxx来选择不同环境 在项目根目录中新建. ...

  4. vue动态设置文字布局方式_详解Vue动态添加模板的几种方法

    动态添加模板需要收集原始数据的页面,这个时候我们需要很多原始数据收集模板,下面给大家详解Vue 动态添加模板的几种方法,希望对你学习这方面知识有所帮助. 通常我们会在组件里的 template 属性定 ...

  5. 详解Vue中watch的高级用法

    转载自  详解Vue中watch的高级用法 我们通过实例代码给大家分享了Vue中watch的高级用法,对此知识点有需要的朋友可以跟着学习下. 假设有如下代码: 1 2 3 4 5 6 7 8 9 10 ...

  6. dom不刷新 vue 加数据后_详解Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸总结...

    如果你发现你自己需要在 vue 中做一次强制更新,99.9% 的情况,是你在某个地方做错了事. 1. vue 无法检测实例被创建时不存在于 data 中的 property 原因:由于 vue 会在初 ...

  7. 上传服务器后字体文件丢失,详解Vue+elementUI build打包部署后字体图标丢失问题...

    错误描述: Vue+elementUI  build打包部署后字体图标丢失,控制台显示文件element-icons.woff和element-icons.ttf文件404 错误展现: 控制台报错截图 ...

  8. vue单文件props写法_详解Vue 单文件组件的三种写法

    详解Vue 单文件组件的三种写法 JS构造选项写法 export defaul { data, methods, ...} JS class写法 @Component export default c ...

  9. 详解 Vue 目录及配置文件之 build 目录

    详解 Vue 目录及配置文件之 build 目录 1.1 项目目录介绍 目录/文件 说明 详解 build 项目构建(webpack)相关代码 详解 config 配置目录,包括端口号等 详解 nod ...

最新文章

  1. 细节详解 | Bert,GPT,RNN及LSTM模型
  2. linux 查看软连接_linux删除原理
  3. Cookie和Session-学习笔记01【Cookie_快速入门、Cookie_细节】
  4. [html] 浏览器是怎么对HTML5的离线储存资源进行管理和加载的
  5. 基于C++中常见内存错误的总结
  6. android imageview 设置网络图片,ImageView加载网络图片
  7. 2020重学Go系列:反引号的妙用—结构体里的 Tag 标签
  8. 各种集合key,value能否为null
  9. 废旧 Android 手机如何改造成 Linux 服务器?
  10. sql server 2012序列号密钥sql server 2012序列号sql密钥
  11. Linux命令:reboot
  12. 成为会带团队的技术人 大项目:把握关键点,谋定而后动
  13. Java简易转码工具(一个字符串编码是GBK的文本文件,内容转成UTF-8编码)
  14. 如何画出漂亮的神经网络图?
  15. 【数字华容道】一、核心
  16. 将windows里的内容直接复制粘贴到ubuntu,提高效率
  17. 谈谈CornerStone这个工具的使用
  18. Java 应用一般架构
  19. Deepin 15.11下载安装新版 QQ Linux
  20. 利用金山快盘和TortoiseSVN搭建自己的svn服务器

热门文章

  1. 3月13日 抽奖活动
  2. Ajax Control Toolkit 32个服务器端控件
  3. 关于卡巴斯基安全免疫区随笔
  4. Fedora和Fedora Core各个历史版本官方下载地址
  5. 《流浪地球》虽好,却存在一个不可回避的硬伤!
  6. labview如何进行串口通讯(转)
  7. windows已添加Pin码仍提示添加的解决方法
  8. 关于__VA_ARGS__的说明
  9. qt 二维数组初始化_第十九章、C语言学习之数组3
  10. 测试用例设计怎么做?怎么设计一个好的测试用例?