vue项目cli2 升级 cli3

news2024/9/25 21:26:35

vue-cli2 升级 vue-cli3

由于vue-cli2 版本太低,升级到vue-cli3
采用的方法是新建cli3项目,对比差异,在cli2项目单独升级

检查环境

  1. node环境检查版本是否在8.11版本以上

  2. npm uninstall vue-cli -g 卸载旧版本的vue-cli

  3. npm install -g @vue/cli 安装新版本

新建cli3项目

  1. vue create

  2. 选择自定义安装

image

  1. 按空格选择

image

image

  1. 依次选择2.x,ESLint+Prettier,Lint on Save,In dedicated config files

文件迁移

  1. 在cli2项目根目录中新建public,vue.config.js

  2. cli2的index.html对应cli3的public/index.html,把index.html移动到public

  3. cli2的static对应cli3的public目录,把static里的内容全部移到public中,使用了static内文件的话,引用路径都改成public

  4. cli2项目删除.babelrc.js,并移入cli3项目中的babel.config.js

vue.config.js配置

  1. 基础配置
const { defineConfig } = require('@vue/cli-service')
const path = require('path')
const resolve = (dir) => path.join(__dirname, '.', dir)

module.exports = defineConfig({
  devServer: {
    // 本地开发使用
    host: 'localhost',
    port: 8080,
    open: true,
    proxy: {
      '/pre': {
        target: 'http://xxx.com',
        changeOrigin: true,
        ws: true,
        pathRewrite: {
          '^/pre': '' // 重写,
        }
      }
    }
  }, 
  /* 部署应用包时的基本 URL */
  publicPath: process.env.VUE_APP_PUBLICPATH || '/',
  /* 输出文件目录:在npm run build时,生成文件的目录名称 */
  outputDir: 'dist',
  /* 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录 */
  assetsDir: 'static',
  /* 是否在构建生产包时生成 sourceMap 文件,false将提高构建速度 */
  productionSourceMap: false,
  chainWebpack: (config) => {
    // 设置别名
    config.resolve.alias.set('@', resolve('src'))
    // 正式环境下,删除console和debugger
    config.optimization
      .minimize(true)
      .minimizer('terser')
      .tap((args) => {
        const { terserOptions } = args[0]
        terserOptions.compress.drop_console = true
        terserOptions.compress.drop_debugger = true
        return args
      }) 
  },
})

package.json依赖

  1. 把cli3项目中devDependencies以下内容移动到cli2项目中, npm install 安装依赖
"@babel/core": "^7.12.16",
"@babel/eslint-parser": "^7.12.16",
"@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-eslint": "~5.0.0",
"@vue/cli-plugin-router": "~5.0.0",
"@vue/cli-plugin-vuex": "~5.0.0",
"@vue/cli-service": "~5.0.0",

出现了以下几个主要报错:

报错:TypeError: Cannot read property ‘version’ of undefined

解决:npm uninstall eslint --save , npm install eslint --save

image

报错: Error: Cannot find module ‘webpack/lib/RequestShortener’

解决:把cli2项目devDependencies以下内容删除,重新安装webpack,npm install webpack --save-dev

"webpack": "4.16.5",
"webpack-cli": "3.1.0",
"webpack-dev-server": "3.1.14",
"webpack-merge": "4.1.4"

报错: webpack < 5 used to include polyfills for node.js core modules by default.

解决:npm install path-browserify ,在vue.config.js添加

configureWebpack: {
   resolve: {
     fallback: { path: require.resolve("path-browserify") }
   }
}

image

报错:vue/max-attributes-per-line" is invalid

解决:.eslintrc.js 文件 rules 删除 “allowFirstLine”: false

rules: { 
   "vue/max-attributes-per-line": [2, {
      "singleline": 10,
      "multiline": {
        "max": 1,
        // "allowFirstLine": false // 删除
      }
    }]
 }

image

报错:旧项目很多地方没有按照eslint规则来,300多个error

解决:vue.config.js关闭eslint

module.exports = {
    lintOnSave: false
}

main.js 配置

修改如下

new Vue({
  router,
  store,
  render: (h) => h(App),
}).$mount("#app");

到这里项目已经可以运行起来啦

环境配置

.env.dev

NODE_ENV = development
VUE_APP_ENVDESC = 开发环境
VUE_APP_BASEAPI = /pre

.env.prod

NODE_ENV = procudtion
VUE_APP_ENVDESC = 生产环境
VUE_APP_BASEAPI = http://www.aladingziben.com
VUE_APP_PUBLICPATH= /management

.env.test

NODE_ENV = procudtion
VUE_APP_ENVDESC = 测试环境
VUE_APP_BASEAPI = http://test-management.aladingziben.com
VUE_APP_PUBLICPATH= /cli

.env.prv

NODE_ENV = procudtion
VUE_APP_ENVDESC = 预生产环境
VUE_APP_BASEAPI = http://prv-management.aladingziben.com

NODE_ENV:每个环境都存在的变量,在代码中用于区分当前的运行环境,默认如果不写时,serve命令下的NODE_ENV值为development,build命令下的NODE_ENV值为production。如果复写了此变量,则会使用复写的值。调用方法process.env.NODE_ENV

变量命名:只有NODE_ENV,BASE_URL 和以 VUE_APP_开头的变量将通过
webpack.DefinePlugin 静态地嵌入到客户端侧的代码中,调用方法process.env.VUE_APP_XXX

router/index.js ,base 替换成 process.env.VUE\_APP\_PUBLICPATH || '/'

  1. package.json配置如下,npm dev serve 和 npm run build 会自动使NODE_ENV为devlopment和production
"scripts": {
    "serve": "vue-cli-service serve --mode dev",
    "build": "vue-cli-service build --mode prod",
    "build:test": "vue-cli-service build --mode test",
    "build:prv": "vue-cli-service build --mode prv" 
}

–model 后面的参数 需要是 .env.[model] 文件 对应的 [model]

问题:google浏览器刷新登录页报错,苹果浏览器正常

解决:重启电脑,清空浏览器缓存

image

问题:SiderBar样式丢失,不能通过:export 导出scss变量

解决:最新写法,在文件名 .scss前面加上 .module,修改相应路径

image

image
image

问题:SiderBar不显示Svg 图标

解决:在vue.config.js添加相关配置

image

优化

  1. SiderBar样式丢失的问题中,发现多个style文件引入了@/styles/variables.module.scss,会造成样式重复

方案:将该文件设置为全局引入一次,然后可以在各个style文件直接使用,这个时候需要用到sass-loader进行预处理,官方文档CSS Modules

image

项目中sass-loader版本为 “^7.2.0”,一开始用了additionalData,修改为data

image

tip:全局样式都可以在此引入

image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/127369.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

广州蓝景分享—VSCode 前端开发必备插件推荐

Hello~~各位小伙伴好&#xff0c;今天广州蓝景整理一波前端开发必备插件&#xff0c;绝对可以提高你的生产力&#xff0c;希望这篇文章对大家有所帮助。 开发综合推荐 别名路径跳转 插件名&#xff1a;别名路径跳转 使用说明: 别名路径跳转插件&#xff0c;支持任何项目&…

BrightlyPro - 照片视屏后期自动调色增亮工具

BrightlyPro - 照片视屏后期自动调色增亮工具 BrightlyPro 自动增强您的照片和视频&#xff0c;你最需要它。通过一个滑块&#xff0c;BrightlyPro 立即使您的照片自适应地亮起来&#xff0c;同时保持光影之间令人愉悦的平衡&#xff0c;而不会扭曲已经点亮的区域。 下载 ➤ …

day07 面向对象

1. 类和对象 **面向对象和面向过程的思想对比 : ** ​ **面向过程 &#xff1a;**是一种以过程为中心的编程思想&#xff0c;实现功能的每一步&#xff0c;都是自己实现的 ​ **面向对象 &#xff1a;**是一种以对象为中心的编程思想&#xff0c;通过指挥对象实现具体的功能…

Java开发学习(三十四)----Maven私服(二)本地仓库访问私服配置与私服资源上传下载

一、本地仓库访问私服配置 我们通过IDEA将开发的模块上传到私服&#xff0c;中间是要经过本地Maven的 本地Maven需要知道私服的访问地址以及私服访问的用户名和密码 私服中的仓库很多&#xff0c;Maven最终要把资源上传到哪个仓库? Maven下载的时候&#xff0c;又需要携带用…

Nginx限制每秒请求次数,限制每秒连接次数,下载速度限制

Hi I’m Shendi 为了防止网站被恶意攻击&#xff0c;总是需要做一些防护措施 最外层的web服务器是Nginx&#xff0c;于是寻找 nginx 的一些关于防护措施的配置&#xff0c;记录在此 https://sdpro.top/blog/html/article/1005.html 一些变量 首先列举出会使用到的一些变量 …

XXEXML漏洞详解

XXE&XML漏洞详解1.XML基础1.1.XML基础介绍1.2.XML文档结构1.3.DTD介绍1.4.实体类介绍1.5.外部实体2.XXE漏洞基本介绍2.1.XXE漏洞基本概念2.2.XXE漏洞危害2.3.XXE漏洞输出形式2.4.XXE漏洞相关差异3.XXE漏洞测试3.1.有回显测试3.1.1.有回显案例3.1.1.1.测试回显位置3.1.1.2.构…

【XR】Oculus揭秘Touch控制器追踪技术:LED 匹配

Oculus揭秘Touch控制器追踪技术&#xff1a;LED 匹配 稳健的状态机&#xff0c;它允许我们能够在各种求解器之间进行转换 &#xff08;映维网 2019年11月05日&#xff09;映维网曾在九月分享了一篇关于Oculus Constellation追踪系统&#xff0c;其中负责AR/VR设备输入追踪的F…

动态规划——区间dp

区间dp 文章目录区间dp概述模板例题石子合并思路代码环形石子合并思路代码能量项链思路代码加分二叉树思路代码凸多边形的划分思路代码棋盘分割思路代码总结概述 区间dp就是在区间上进行动态规划&#xff0c;求解一段区间上的最优解。主要是通过合并小区间的最优解进而得出整个…

Infragistics Ignite UI for Web

Infragistics Ignite UI for Web 添加了新的透视网格组件&#xff0c;它在透视表中显示数据&#xff0c;并帮助对数据集执行复杂的分析。 使用透视网格以多维透视表结构配置和显示数据。 行和列表示不同的数据组&#xff0c;数据单元值表示聚合。 这允许基于简单的平面数据集进…

Sql Server 中FOR XML PATH(‘‘)函数用法

1. 如下表 2. 转换xml -- 将查询结果转换成xml形式 select name from zz FOR XML PATH(root);结果 说明 FOR XML PATH(‘root’)中root是xml根节点&#xff0c;所以在结果集中每条数据根节点为root&#xff0c;上面的sql将多行数据合并为一行&#xff0c;并且使用属性名name…

黑马Hive+Spark离线数仓工业项目--数仓事实层DWB层构建(3)

网点物料事实指标分析及实现 目标&#xff1a;实现DWB层网点物料事实指标表的构建 路径 - step1&#xff1a;目标需求 - step2&#xff1a;数据来源 - step3&#xff1a;目标实现 实施 - **目标需求**&#xff1a;基于物料申请单的信息统计物料申请数量、物料申请金额等…

Scriptcase配置日期字段位置日期格式的功能

Scriptcase配置日期字段位置日期格式的功能 在“翻译应用程序”工具中添加了搜索索引的快速搜索。 在项目列表屏幕上添加了垂直方向的固定条。 在登录和许可证注册屏幕上添加了显示/隐藏密码图标。 在快速编辑中添加了错误位置选项。 在Express Edit中的模式中添加了“显示字段…

电容触摸屏GT9147介绍

GT9147简介 GT9147是采用最新的电容检测技术&#xff0c;内置高性能微信号检测电路&#xff0c;可很好地解决LCD干扰和共模干扰问题。软件算法方面&#xff0c;专门基于单层互容的电气环境所设计&#xff0c;可支持5点触控。同时支持HotKnot功能 GT9147可同时识别5个触摸点位的…

宝塔面板安装使用教程

宝塔面板使用教程 宝塔面板是一款服务器管理软件&#xff0c;可以帮助用户建立网站&#xff0c;一键配置服务器环境&#xff0c;使得用户通过web界面就可以轻松的管理安装所用的服务器软件。 1 宝塔面板安装 1.1 宝塔面板的安装 宝塔面板官网地址&#xff1a;https://www.bt.…

线程相关学习记录(2)

锁分类 按照对共享资源是否上锁&#xff0c;可以分为&#xff1a; 乐观锁悲观锁 乐观锁的定义&#xff1a; 乐观锁是一种乐观思想&#xff0c;认为自己在使用数据时不会有别的线程修改数据&#xff0c;所以不会添加锁&#xff0c;只是在提交修改的时候去判断一下&#xff0c…

【通过点按其他按钮修改按钮的位置 Objective-C语言】

一、继续我们上一个例子 1.下面我们要实现的功能,是通过点按4个方向键,修改最上面那个图片按钮的位置 2.首先,我们把4个方向按钮实现一下 我先拽1个按钮上去,注意,我们不是1上来就拽6个按钮, 而是先拽1个按钮上去 我设置这1个按钮,大家看一下,这个按钮上有文字吗,…

盒子模型中box-sizing: border-box;的作用

我们都知道 盒子模型 它都是由 外边距(margin) 边框(border) 内边距(padding) 内容(content)组成的。 如果我们按照下面的设置&#xff0c;得到的是一个300*300大小的红色正方形 .box {height: 300px;width: 300px;background-color: red; } <body><div class&q…

如何使用阻塞队列BlockingQueue

文章目录什么是阻塞队列阻塞队列的特点BlockingQueue不是新的东西学会使用队列阻塞队列四组APISynchronousQueue 同步队列什么是阻塞队列 阻塞队列本质上还是一种队列&#xff0c;遵循先进先出&#xff0c;后进后出的原则&#xff0c;在此基础上&#xff0c;如果出队时阻塞队列…

BM32 合并二叉树

题目 已知两颗二叉树&#xff0c;将它们合并成一颗二叉树。合并规则是&#xff1a;都存在的结点&#xff0c;就将结点值加起来&#xff0c;否则空的位置就由另一个树的结点来代替。例如&#xff1a; 两颗二叉树是: Tree 1 Tree 2 合并后的树为 数据范围&#xff1a;树上节点数…

全网惟一面向软件测试人员的Python基础教程-在Python中元组有点何用?

全网惟一面向软件测试人员的Python基础教程 起点&#xff1a;《python软件测试实战宝典》介绍 第一章 为什么软件测试人员要学习Python 第二章 学Python之前要搞懂的道理 第三章 你知道Python代码是怎样运行的吗&#xff1f; 第四章 Python数据类型中有那些故事呢&#xff1f;…