升级步骤
1、 删除原vue-cli并安装vue-cli3.0
2、删除新项目中src下的内容,把原项目中src目录覆盖到新项目中
3、把router从目录文件夹改为文件,src/router/index.js提高一层变成src/router.js
4、 我的项目中src已经分为了views和components所以无需修改,如果不是这个结构需要自己区分下
5、将原项目的index.html及favicon.ico覆盖到新项目的public中
6、 将原项目的static文件夹拷贝到新项目的public中
7、 修改package.json文件,保持和原有项目一致即可
8、 创建并配置vue.config.js文件

删除命令:

npm uninstall vue-cli -g

安装@vue/cli命令:

npm install -g @vue/cli

我在这里省略安装流程,掘金上已经有很多文章了,下面说下会遇到的问题:

1、找不到vue文件

CMD中的报错

These dependencies were not found:
* @/views/index/index in ./src/router.js
* @/views/index/otherIndex in ./src/router.js
To install them, you can run: npm install --save @/views/index/index @/views/index/other

页面上的报错

./src/router.js
Module not found:
Error: Can't resolve '@/views/index/index' in 'D:\VUE\haigui-proxy\src'
这种报错是说明文件路径错误没有找到文件,因为在原项目中设置了“@”也就是alias(别名),也有可能在原项目中设置了extensions(可以省略扩展名),所以需要在新项目的vue.config.js中设置如下内容:
const path = require('path'); // vue.config.js顶部
const resolve = (dir) => path.join(__dirname, dir);
module.exports = {configureWebpack: config => {Object.assign(config, {resolve: {extensions: ['.js', '.vue', '.json'], // 可以省略后缀名alias: { // 别名,在require的时候,可以使用这些别名,来缩短路径的长度'@': path.resolve(__dirname, './src'),'@c': path.resolve(__dirname, './src/components')}}});}
}

2、找不到image图片

Module not found:
Error: Can't resolve '../../../static/image/avatar_gray.jpg' in 'D:\VUE\haigui-proxy\src\views\index'

当把原项目的src和static拷贝到新项目后,就会出现图片路径不对的问题,网上很多有关vue-cli3.0配置的文章都说的是把原项目的static直接拷贝到新项目的public中,其实这是不对,官方给出的原因是:

任何放置在 public 文件夹的静态资源都会被简单的复制,而不经过 webpack。需要通过绝对路径来引用它们。

例如,目录为public/static/image,image里面存放各种图片:

引入图片logo.png:

<img src="/static/image/logo.png" > 

在 css 中 设置背景图片:

.bg {background: url('/satic/image/bg.jpg');
}

注意:

public 目录提供的是一个应急手段,当你通过绝对路径引用它时,留意应用将会部署到哪里。如果你的应用没有部署在域名的根部,那么你需要为你的 URL 配置 publicPath 前缀。

何时使用 public 文件夹

  • 你需要在构建输出中指定一个文件的名字。
  • 你有上千个图片,需要动态引用它们的路径。
  • 有些库可能和 webpack 不兼容,这时你除了将其用一个独立的 标签引入没有别的选择。

通过 webpack 的处理好处:

  • 脚本和样式表会被压缩且打包在一起,从而避免额外的网络请求。
  • 文件丢失会直接在编译时报错,而不是到了用户端才产生 404 错误。
  • 最终生成的文件名包含了内容哈希,因此你不必担心浏览器会缓存它们的老版本。
  • public 目录提供的是一个应急手段,当你通过绝对路径引用它时,留意应用将会部署到哪里。

assets文件夹就是用来放置经过webpack处理的资源的

需要使用相对路径引入:

<!-- 具体根据目录结构来 -->
<img src="../assets/images/logo-black.png">

img动态路径:

<img :src="imgurl">
data () {return {  imgurl: require("../assets/images/gou.png")  }
}

css 背景图:

.login-wrapper {background: url('../../assets/images/bg.jpg');
}

参考:官方解释

3、scss全局变量的配置

Module build failed (from ./node_modules/sass-loader/lib/loader.js):
Undefined variable.  955 │    border-right: 1px solid $borderColor;^^^^^^^^^^^^
root stylesheet in D:\VUE\haigui-proxy\src\views\index\index.vue (line 955, column 33)

若原项目中使用了scss并且使用了全局变量,需要在vue.config.js中重新配置,并把全局变量文件放到src/assets/css目录下

在原项目中需要在build/utils.js中进行配置

scss: generateLoaders('sass').concat({loader: 'sass-resources-loader',options: {resources: path.resolve(__dirname, '../src/assets/css/haigui-variable.scss')}}
)

新项目中就简单的多,直接编辑vue.config.js,加入一节内容即可:

css: {loaderOptions: {sass: {// @/ 是 src/ 的别名 ~是必须有要加的data: '@import "~@/assets/css/haigui-variable";'// 如果没有设置别名可以这么写// data: '@import "./src/assets/css/haigui-variable";'}}
}

4、runtime-only

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.

原因:vue有两种形式的代码 compiler(模板)模式和runtime模式(运行时),vue模块的package.json的main字段默认为runtime模式, 指向了"dist/vue.runtime.common.js"位置。

这是vue升级到2.0之后就有的特点。

而在main.js文件中,初始化vue却是这么写的,这种形式为compiler模式的,所以就会出现上面的错误信息。

new Vue({el: '#app',router,store,components: { App },template: '<App/>'
});

解决办法:

方法一:将main.js中的代码修改如下就可以

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

到这里我们的问题还没完,那为什么之前是没问题的,之前vue版本也是2.x的呀?

这也是第二种解决办法:因为之前我们的webpack配置文件里有个别名配置,具体如下

resolve: {alias: {'vue$': 'vue/dist/vue.esm.js' //内部为正则表达式 vue结尾的}
}

也就是说,import Vue from ‘vue’ 这行代码被解析为 import Vue from ‘vue/dist/vue.esm.js’,直接指定了文件的位置,没有使用main字段默认的文件位置。

所以第二种解决方法就是,在vue.config.js文件里加上webpack的如下配置即可,

configureWebpack: {resolve: {alias: {'vue$': 'vue/dist/vue.esm.js' }}
}

既然到了这里就会想到第三中解决方法,那就是在引用vue时,直接写成如下即可

import Vue from 'vue/dist/vue.esm.js'

感谢大佬LeonWuV的分享

vue老项目升级vue-cli3.0问题总结相关推荐

  1. vue cli项目升级--vue cli3升级到vue cli4

    原文网址:vue cli项目升级--vue cli3升级到vue cli4_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍如何升级vue项目的vue cli版本. 官方网址 https://c ...

  2. 创建VUE项目,vue-cli2.0版本和3.0版本的区别,将vue2.0项目升级为vue3.0项目

    创建VUE项目,vue-cli2.0版本和3.0版本的区别,将vue2.0项目升级为vue3.0项目 使用vue-cli2.0版本创建vue项目 创建前的准备 开始创建 创建过程 项目正常创建 使用v ...

  3. 将 Unity5.3 的老项目升级到 Unity 2018.3 遇到的些许问题。

    删除 ParticleEmmiter 等废弃的接口: 删除 WindowsSecurityContext System.Security.Principal.WindowsIdentity 在 .Ne ...

  4. 820android10,骁龙820老旗舰升级安卓9.0?这个品牌做到了

    原标题:骁龙820老旗舰升级安卓9.0?这个品牌做到了 2015年第四季度,也就是差不多两年零八个月之前,高通发布了至今为止的最后一代全自主架构旗舰手机主控骁龙820.作为曾经的"火龙&qu ...

  5. vue 安装 less_解决旧Vue项目升级less-loader 6.0.0报错

    作为一个爱折腾的主,我的package随时都是ncu -u! 何为ncu,就是检查nodejs npm/yarn项目依赖最新版本package.json一个插件! 这不,前几天less-loader ...

  6. 记一次 react 15.3.1 老项目升级到 react 16.7.0 之路

    互相交流学习,请加我微信: iyangyuanjian,QQ:624508914 1.前言 该项目是公司内部服务与外部服务的中台系统,我称之为大杂烩 项目始于:2015年10月8号 18:31:39秒 ...

  7. Vue老项目由js转换ts指南

    Vue(2.x)老项目由js转换ts指南 其实在网上有不少关于,vue迁入ts的教程,但是很多并不完善,故做此篇 本项目基于 vue-admin-template进行改造 ,它是有ts版本的,因此本文 ...

  8. Vue开发项目入门——Vue脚手架

    1.什么是Vue脚手架 Vue脚手架是Vue官方提供的标准化开发工具(开发平台),它提供命令行和UI界面,方便创建vue工程.配置第三方依赖.编译vue工程. 特别注意:Vue脚手架是用来方便开发的, ...

  9. Vue.js 项目查看 vue版本号

    vue -V或者是vue --version查询的是vue-cli的版本,也就是vue脚手架的版本. 如果想要查看vue的版本,直接去项目中,在根目录下,找到package.json文件夹 找&quo ...

最新文章

  1. C++ STL的sort 函数 以及自定义的比较函数
  2. 关于C#中用access做数据库,使用like语句的问题
  3. nginx 高并发优化参数
  4. php carbon 连续日期,日期及时间处理包 Carbon 在 Laravel 中的简单使用
  5. 面试题17.04.消失的数字
  6. 2019云计算战局前瞻:百度云要啃“硬骨头”
  7. 20210201:力扣第226周周赛(上)
  8. 【推荐算法】协同过滤算法——基于用户 Java实现
  9. obj type using in findobj
  10. Flutter之Align和AlignmentGeometry
  11. c# MessageBox 用法大全
  12. 通过ADB命令打开MTK和展讯日志的方法
  13. 【Windows】bat | 服务 | bat作为服务 | bat转exe
  14. Cortex-M3 (NXP LPC1788)之UART用法
  15. Android判断世界各国手机号码合法性
  16. 存储容量单位GB GiB MB MiB
  17. 高考英语50分学计算机,高三英语50分到100分学习窍门
  18. Facebook Bows to Pressure Over Privacy
  19. via/route blockage/size blockage/wire/pin guide/pin blockage/partition
  20. 在MATLAB环境下使用深度学习网络DeepLabV3+进行语义分割(云图分割)

热门文章

  1. 硬件知识--单片机高精度电流测量电路
  2. (Arduino)蓝牙和 APPinventor实现一键SOS求救(一)
  3. IGBT静态参数测试
  4. CSS学习笔记7PS切图与仿学成在线例子
  5. 计算机总是无法完成更新失败,Win10系统更新失败无法完成更新正在撤销更改的解决方法...
  6. 转专业计算机类面试自我介绍,转专业面试自我介绍
  7. win101909要不要更新_近年最稳的Win10更新?Win10 1909值得升级吗
  8. ASP.Net: EshineASPNet教程-支付机构支付模块
  9. Kotlin高仿微信-第14篇-单聊-视频通话
  10. 淘宝Hadoop作业平台宙斯(zeus)开源