项目优化策略
一.使用Vue ui可视化面板第一步:使用Windows+R快捷键,输入cmd,打开小黑窗,然后输入vue ui命令,运行成功之后会自动打开可视化面板,如下图:第二步:导入或创建一个vue项目开始使用二.生产打包报告第一步:在package.json页找到vue-cli-service build后加--report第二步:打包后就可以在dist文件中找到report.html三.去除
一.使用Vue ui可视化面板
第一步:使用Windows+R快捷键,输入cmd,打开小黑窗,然后输入vue ui命令,运行成功之后会自动打开可视化面板,如下图:
第二步:导入或创建一个vue项目开始使用
二.生产打包报告
第一步:在package.json页找到vue-cli-service build后加--report
第二步:打包后就可以在dist文件中找到report.html
三.去除console打印
第一步:先安装插件
npm i babel-plugin-transform-remove-console --save-dev //下载去除console的依赖
第二步:在根目录下找到babel.config.js文件
操作,如图:
// 这是项目发布阶段需要用到的 babel 插件
const prodPlugins = []
// 如果为production环境下就在prodPlugins数组中添加'transform-remove-console'
//如果为开发环境就会正常输出console方便调试
if (process.env.NODE_ENV === 'production') {
prodPlugins.push('transform-remove-console')
}
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
],
plugins: [
// 发布产品时候的插入数组
// ...为扩展运算符把prodPlugins的每一项添加到该数组中
...prodPlugins,
]
}
四.去除生产环境sourceMap
- vue项目打包之后js文件夹中,会自动生成一些map文件,占用相当一部分空间
- sourceMap资源映射文件,存的是打包前后的代码位置,方便开发使用,这个占用相当一部分空间。
- map文件的作用在于:项目打包后,代码都是经过压缩加密的,如果运行时报错,输出的错误信息无法准确得知是哪里的代码报错,有了map就可以像未加密的代码一样,准确的输出是哪一行哪一列有错。
通过vue-cli 3.0 工具生成的项目,默认隐藏了所有webpack的配置项,目的是为了屏蔽项目的配置过程,让程序员把工作的中心,放到具体功能和业务逻辑的实现上。
如果程序员有修改webpack默认配置的需要,可以在项目根目录中,按需创建vue.config.js
从而对项目的打包发布过程做自定义的配置。
生产环境是不需要sourceMap
的,在项目根目录创建vue.config.js 如下配置可以去除:
module.exports = {
publicPath: './', // 静态资源路径(默认/,打包后会白屏)
productionSourceMap: false, //去除生产环境的productionSourceMap
}
配置后重新打包,dist文件中map文件将全部删除。
五.为开发模式和发布模式指定不同的打包入口
第一步:在项目根目录中创建或找到vue.config.js
文件 配置如下:
module.exports = {
publicPath: './',
//去除生产环境的productionSourceMap
productionSourceMap: false,
chainWebpack: config => {
//发布模式
// 用config.when函数判断我们当前处于什么编译模式
config.when(process.env.NODE_ENV === 'production', config => {
//如果处于打包阶段用entry找到默认的打包入口,调用clear则是删除默认的打包入口
//add添加新的打包入口
config.entry('app').clear().add('./src/main-prod.js')
})
//开发模式
config.when(process.env.NODE_ENV === 'development', config => {
config.entry('app').clear().add('./src/main-dev.js')
})
}
}
第二步:在src文件下创建 main-prod.js和 main-dev.js然后将原有的main.js全部复制到main-dev中去,main-prod则是打包入口按需配置。
六.第三方库启用CDN
通过externals加载外部CDN资源
第一步:在vue.config.js文件下的发布模式里进行配置。
具体配置如下:
module.exports = {
publicPath: './',
//去除生产环境的productionSourceMap
productionSourceMap: false,
chainWebpack: config => {
//发布模式
// 用config.when函数判断我们当前处于什么编译模式
config.when(process.env.NODE_ENV === 'production', config => {
//如果处于打包阶段用entry找到默认的打包入口,调用clear则是删除默认的打包入口
//add添加新的打包入口
config.entry('app').clear().add('./src/main-prod.js')
//使用externals设置排除项
config.set('externals', {
vue: 'Vue',
'vue-router': 'VueRouter',
axios: 'axios',
// lodash: '_',
echarts: 'echarts',
nprogress: 'NProgress',
// 'vue-quill-editor': 'VueQuillEditor'
})
})
//开发模式
config.when(process.env.NODE_ENV === 'development', config => {
config.entry('app').clear().add('./src/main-dev.js')
})
}
}
第二步:需要在public/index.html文件的头部,添加如下的CDN资源引用:
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title>demo title</title>
<!-- 先判断是否是发布模式,发布模式引入cdn资源 -->
<% if(htmlWebpackPlugin.options.isProd){ %>
<!-- nprogress 的样式表文件 -->
<link rel="stylesheet" href="https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.css" />
<!-- 富文本编辑器 的样式表文件 -->
<link rel="stylesheet" href="https://cdn.staticfile.org/quill/1.3.4/quill.core.min.css" />
<link rel="stylesheet" href="https://cdn.staticfile.org/quill/1.3.4/quill.snow.min.css" />
<link rel="stylesheet" href="https://cdn.staticfile.org/quill/1.3.4/quill.bubble.min.css" />
<!-- element-ui 的样式表文件 -->
<link rel="stylesheet" href="https://cdn.staticfile.org/element-ui/2.8.2/theme-chalk/index.css" />
<script src="https://cdn.staticfile.org/vue/2.5.22/vue.min.js"></script>
<script src="https://cdn.staticfile.org/vue-router/3.0.1/vue-router.min.js"></script>
<script src="https://cdn.staticfile.org/axios/0.18.0/axios.min.js"></script>
<script src="https://cdn.staticfile.org/lodash.js/4.17.11/lodash.min.js"></script>
<script src="https://cdn.staticfile.org/echarts/4.1.0/echarts.min.js"></script>
<script src="https://cdn.staticfile.org/nprogress/0.2.0/nprogress.min.js"></script>
<!-- 富文本编辑器的 js 文件 -->
<script src="https://cdn.staticfile.org/quill/1.3.4/quill.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vue-quill-editor@3.0.4/dist/vue-quill-editor.js"></script>
<!-- element-ui 的 js 文件 -->
<script src="https://cdn.staticfile.org/element-ui/2.8.2/index.js"></script>
<% } %>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
踩坑记录: 曾遇到报错 Uncaught TypeError: Cannot redefine property: $router
解决方案:
vue-cli 项目优化时报错 Uncaught TypeError: Cannot redefine property: $router_m0_51608940的博客-CSDN博客
七.通过CDN优化ElementUI
第一步:在main-prod.js中,注释掉element-ui按需加载的代码
第二步:在index.html的头部区域中,通过CDN加载element-ui的js和css样式
<!-- element-ui 的样式表文件 -->
<link rel="stylesheet" href="https://cdn.staticfile.org/element-ui/2.8.2/themechalk/index.css" />
<!-- element-ui 的 js 文件 -->
<script src="https://cdn.staticfile.org/element-ui/2.8.2/index.js"></script>
注意版本等级 这里cdn地址版本较低
八.首页内容定制
开发环境的首页和发布环境的首页展示内容的形式有所不同
如开发环境中使用的是import加载第三方包,而发布环境则是使用CDN,那么首页也需根据环境不同来进行不同的实现
第一步:我们可以通过插件的方式来定制首页内容,打开vue.config.js
,编写代码如下:
module.exports = {
publicPath: './',
//去除生产环境的productionSourceMap
productionSourceMap: false,
chainWebpack: config => {
//发布模式
// 用config.when函数判断我们当前处于什么编译模式
config.when(process.env.NODE_ENV === 'production', config => {
//如果处于打包阶段用entry找到默认的打包入口,调用clear则是删除默认的打包入口
//add添加新的打包入口
config.entry('app').clear().add('./src/main-prod.js')
//使用externals设置排除项
config.set('externals', {
vue: 'Vue',
'vue-router': 'VueRouter',
axios: 'axios',
// lodash: '_',
echarts: 'echarts',
nprogress: 'NProgress',
// 'vue-quill-editor': 'VueQuillEditor'
})
//使用插件
config.plugin('html').tap(args => {
//添加参数isProd
args[0].isProd = true
return args
})
})
//开发模式
config.when(process.env.NODE_ENV === 'development', config => {
config.entry('app').clear().add('./src/main-dev.js')
//使用插件
config.plugin('html').tap(args => {
//添加参数isProd
args[0].isProd = false
return args
})
})
}
}
第二步:然后在public/index.html
中使用插件判断是否为发布环境并定制首页内容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= htmlWebpackPlugin.options.isProd ? '' : 'dev - ' %>demo title</title>
<% if(htmlWebpackPlugin.options.isProd){ %>
<!-- element-ui 的样式表文件 -->
<linkrel="stylesheet"href="https://cdn.staticfile.org/elementui/2.8.2/themechalk/index.css" />
<!-- element-ui 的 js 文件 -->
<script src="https://cdn.staticfile.org/element-ui/2.8.2/index.js"></script>
<% } %>
</head>
.......
更多推荐
所有评论(0)