Vue CLI2升级至Vue CLI3的方法步骤
作者:dailybird 发布时间:2024-06-05 10:03:25
以下备忘升级至 Vue CLI 3.x 版本后,将项目目录改为新结构时所需做的一些改动。
1. 卸载与安装
npm uninstall vue-cli -g
npm install -g @vue/cli
注:若要使用 Vue CLI 3,需将 Node 版本升级至 8.9 及以上。
当使用 nvm 管理 node 版本时,可以使用如下方式切换至需求的 Node 版本:
# 安装 >= 8.9 的某个版本
nvm install 8.12.0
# 在当前 session 中使用该版本
nvm use 8.12.0
# 设置默认的 Node 版本
nvm alias default 8.12.0
2. 环境变量与多环境配置
2.1 环境变量
在 Vue CLI 2.x 中,如果需要定义环境变量,需要在 build/webpack.dev.conf.js
中加入:
plugins: [
new webpack.DefinePlugin({
'process.xxx': "'some value'",
})
]
而在 Vue CLI 3.x 中,我们可以使用配置文件的方式便捷的进行配置:
在项目中新建 .env
文件,写入
VUE_APP_KEY=VALUE
即可在需要的地方使用 process.env.VUE_APP_KEY
调用了。注意,这里环境变量必须以 VUE_APP_
开头。
2.2 多环境配置
配置文件同样支持多环境,即 .env.development
文件表示 development
环境;.env.production
文件表示 production
环境。
在使用 npm
命令时,可以通过指定 --mode xxx
来启用某一环境的环境变量。
注:.env
文件为所有环境的公用环境变量。
2.3 本地多环境配置
在 Vue CLI 3 中,声明了对 .env.*.local
不进行 Git 版本控制。
对于一些无需上传到代码仓库的配置,可以使用这一方式。
3. 静态资源文件
Vue CLI 3.x 将默认资源文件根路径放到了 /public
目录下,而默认精简掉了 2.x 版本中的 /static
目录。因而之前放置于 /static
目录中的资源文件及其引用位置需要做些调整。
4. 在 WebStorm 中配置对 @ 符号的支持
默认情况下,JetBrains 系列的 IDE 无法对 Vue 指定的 @
符号进行正确的路径识别。此时我们可以在项目根文件夹下创建 webpack.config.js
文件,并写入:
module.exports = {
resolve: {
alias: {
'@': require('path').resolve(__dirname, 'src')
}
}
};
之后,在 IDE 中指定该文件路径:
之后,IDE 便能正确识别 @
所表示的路径了。
5. 添加全局 Scss 文件
在前端项目中,经常会用到相同的主题色。此时,我们需要存储这些变量,且将其全局引入。
在 Vue CLI 3 中,我们可以在根目录下新建一个 vue.config.js
文件,写入如下内容:
module.exports = {
css: {
loaderOptions: {
sass: {
data: `@import "@/styles/settings.scss";`
}
}
}
};
此时,settings.scss
该文件中的变量值便能在任意 Vue 组件中使用了。
当然,如果要在 .vue
文件中使用 SCSS 语法,需要在 <style>
标签中增加如下属性:
<style scoped lang="scss" type="text/scss">
</style>
6. 调整 ESLint 配置
ESLint 对未使用的变量和函数参数都做了限制,但原项目中确实有些地方需要保留这些 “暂时用不上” 的变量,因而这里对默认的 ESLint 设置做了调整,即修改 .eslintrc.js
文件:
{
...
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'vue/no-unused-vars': 'off',
'vue/no-empty-pattern': 'off'
},
...
}
7. Compiler 模式变更为 Runtime 模式
在升级至 Vue CLI 3 之后,直接运行可能会出现如下报错:
[Vue warn]: You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build.
(found in <Root>)
这是因为 3.x 版本默认使用的是运行时模式,需要对 main.js
文件进行修改:
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app');
将其改为上述方式即可。
8. 配置 lodash 使其模块化加载
在项目中,如果使用如下方式引入 lodash:
import _ from 'lodash';
那么,即使只使用了其中的 _.get()
方法,也会将全部的 lodash 依赖压缩到 .js 文件中。这不是我们期望的。
此时,我们可以通过如下方式,使其能够在这种引入方式下,也能自动实现模块加载:
首先,安装如下依赖:
npm install babel-plugin-lodash --save-dev
然后在 babel.config.js
中添加如下内容:
module.exports = {
...
plugins: [
'lodash'
]
...
};
9. 配置 analyzer
我们可以使用 analyzer 分析项目编译后的文件组成,以便进行加载速度优化。
首先安装依赖:
npm install webpack-bundle-analyzer --save-dev
然后在 vue.config.js
中添加如下配置:
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
module.exports = {
...
configureWebpack: {
plugins: [
new BundleAnalyzerPlugin()
]
},
...
};
然后在 package.json
中添加新的命令:
"analyze": "npm_config_report=true npm run build"
之后,便可以执行以下语句来查看项目编译后文件大小组成了:
npm run analyze
注:采用这种方式后,每次 npm run dev
或 npm run build
都会自动弹出分析页面。
如果不想这么做,可以直接使用如下方式( 无需安装 webpack-bundle-analyzer
依赖 ):
"analyze": "vue-cli-service build --report"
当执行 npm run analyze
后,/dist
文件夹下会生成 report.html
分析报告页面。
10. 引入外部 CDN
我们可以使用 CDN 来加速部分第三方依赖的加载速度,而不是把它们全部打包到一起。
在使用 script
标签引入需要的 .js 文件后,在 vue.config.js
文件增加如下配置:
module.exports = {
...
configureWebpack: {
externals: {
"echarts": "echarts",
}
},
...
}
即可在需要的地方按如下方式使用了:
import echarts from 'echarts';
11. 忽略编译文件大小限制警告
当执行 npm run build
时,会出现警告信息:
asset size limit: The following asset(s) exceed the recommended size limit (244 KiB).
此时,我们可以在 vue.config.js
中添加如下配置,忽略这条警告信息:
module.exports = {
...
performance: {
hints: false
}
...
};
来源:https://segmentfault.com/a/1190000019230067


猜你喜欢
- pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同。但目前pymysql支持python3.x而后者不支持
- CASE 表达式分为简单表达式与搜索表达式,其中搜索表达式可以覆盖简单表达式的全部能力,我也建议只写搜索表达式,而不要写简单表达式。简单表达
- 本文实例讲述了php测试kafka项目。分享给大家供大家参考,具体如下:概述Kafka是最初由Linkedin公司开发,是一个分布式、分区的
- 简介一款跨平台/无依赖的自动化测试工具,目测只能控制鼠标/键盘/获取屏幕尺寸/弹出消息框/截屏。安装pip install pyautogu
- 实验发现,tensorflow的tensor张量的shape不支持直接作为tf.max_pool的参数,比如下面这种情况(一个错误的示范):
- 先看一段代码<!DOCTYPE html><html lang="en"><head>
- Django中上传文件方式。如何实现文件上传功能?1创建项目uploadfile:创建app:front项目设置INSTALLED_APPS
- Python-pymysql如何向SQL语句中传参方法一:不传递参数## 方式一、不传递参数 id = "01" nam
- 前言对自己写的冗长代码,想重构但又无思路?小编整理了介绍python代码重构优化的一些方法,助你一臂之力。编写干净的 Pythonic 代码
- MySQL DATE_FORMAT函数简介要将日期值格式化为特定格式,请使用DATE_FORMAT函数。 DATE_FORMAT函数的语法如
- 阅读上一篇:FrontPage2002简明教程七:HTML在FrontPage中的应用 FrontPage 2002比起以前版本的FronP
- Introduction分享今天同事问的一个问题, 下面这段代码会报错,先看代码:重点是el-form-item组件的prop属性<t
- Python内置了一些非常有趣、有用的函数,如:filter、map、reduce,都是对一个集合进行处理,filter很容易理解用于过滤,
- 问题创建一个二叉树二叉树有限多个节点的集合,这个集合可能是:空集由一个根节点,和两棵互不相交的,分别称作左子树和右子树的二叉树组成创建二叉树
- 今天在项目中用到了弹出子窗口,就想到了用JavaScript实现的两种方法,一个是window.open();一个是window.showM
- 学习Python数据分析挖掘实战一书时,在数据预处理阶段,有一节要使用拉格朗日插值法对缺失值补充,代码如下:#-*- coding:utf-
- 笔者今天就谈谈自己对这两种操作模式的理解,并且给出一些可行的建议,跟大家一起来提高Oracle数据库的安全性。 一、非归档模式的利与弊。 非
- 1.能调用方法的一定是对象,比如数值、字符串、列表、元组、字典,甚至文件也是对象,Python中一切皆为对象。 str1 = 'he
- 前言本篇主要给大家讲述了如何利用Go语言的语法特性实现Set类型的数据结构,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍吧。需求
- * 说明:复制表(只复制结构,源表名:a 新表名:b) &n