Vue CLI2升级至Vue CLI3的方法步骤


Posted in Javascript onMay 20, 2019

以下备忘升级至 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 中指定该文件路径:

Vue CLI2升级至Vue CLI3的方法步骤

之后,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 devnpm 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
  }
  
  ...
};

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

Javascript 相关文章推荐
Javascript的匿名函数小结
Dec 31 Javascript
javascript中eval函数用法分析
Apr 25 Javascript
浅谈jQuery构造函数分析
May 11 Javascript
JS+CSS实现表格高亮的方法
Aug 05 Javascript
JS运动相关知识点小结(附弹性运动示例)
Jan 08 Javascript
Validform+layer实现漂亮的表单验证特效
Jan 17 Javascript
【经典源码收藏】基于jQuery的项目常见函数封装集合
Jun 07 Javascript
利用jQuery解析获取JSON数据
Apr 08 jQuery
详解angular如何调用HTML字符串的方法
Jun 30 Javascript
微信小程序常见页面跳转操作简单示例
May 01 Javascript
Vue2.0使用嵌套路由实现页面内容切换/公用一级菜单控制页面内容切换(推荐)
May 08 Javascript
浅析Vue中拆分视图层代码的5点建议
Aug 15 Javascript
解决Vue+Electron下Vuex的Dispatch没有效果问题
May 20 #Javascript
微信小程序上传文件到阿里OSS教程
May 20 #Javascript
详解微信小程序开发聊天室—实时聊天,支持图片预览
May 20 #Javascript
Vee-validate 父组件获取子组件表单校验结果的实例代码
May 20 #Javascript
React如何实现浏览器打印部分内容详析
May 19 #Javascript
koa-router路由参数和前端路由的结合详解
May 19 #Javascript
Vue.js中该如何自己维护路由跳转记录
May 19 #Javascript
You might like
抓取并下载CSS中所有图片文件的php代码
2011/09/26 PHP
simplehtmldom Doc api帮助文档
2012/03/26 PHP
ThinkPHP Mobile使用方法简明教程
2014/06/18 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
2015/11/16 PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
2018/01/16 PHP
我也种棵OO树JXTree[js+css+xml]
2007/04/02 Javascript
javascript 主动派发事件总结
2011/08/09 Javascript
javascript 函数及作用域总结介绍
2013/11/12 Javascript
jQuery在iframe中无法弹出对话框的解决方法
2014/01/12 Javascript
JavaScript表格常用操作方法汇总
2015/04/15 Javascript
纯JavaScript代码实现文本比较工具
2016/02/17 Javascript
全屏滚动插件fullPage.js使用实例解析
2016/10/21 Javascript
简单明了区分escape、encodeURI和encodeURIComponent
2018/05/26 Javascript
Mint-UI时间组件起始时间问题及时间插件使用
2018/08/20 Javascript
Node.js 路由的实现方法
2019/06/05 Javascript
js实现踩五彩块游戏
2020/02/08 Javascript
RxJS在TypeScript中的简单使用详解
2020/04/13 Javascript
uniapp实现可以左右滑动导航栏
2020/10/21 Javascript
详解 Python 读写XML文件的实例
2017/08/02 Python
python 基本数据类型占用内存空间大小的实例
2018/06/12 Python
python实现多层感知器MLP(基于双月数据集)
2019/01/18 Python
python实现微信机器人: 登录微信、消息接收、自动回复功能
2019/04/29 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
python3 Scrapy爬虫框架ip代理配置的方法
2020/01/17 Python
Opencv 图片的OCR识别的实战示例
2021/03/02 Python
怀旧收藏品和经典纪念品:Betty’s Attic
2018/08/29 全球购物
省三好学生申请材料
2014/01/22 职场文书
《独坐敬亭山》教学反思
2014/04/08 职场文书
大型演出策划方案
2014/05/28 职场文书
企业理念标语
2014/06/09 职场文书
终止劳动合同通知书
2015/04/16 职场文书
超市食品安全承诺书
2015/04/29 职场文书
团干部培训班心得体会
2016/01/06 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书
解决vue中provide inject的响应式监听
2022/04/19 Vue.js