Vue错误之getOptions问题

标签: 无 分类: 未分类 创建时间:2022-12-13 12:41:29 更新时间:2024-12-03 13:01:37

1.前言

当使用vue2创建项目的时候,引用别人的代码,可能会出现:this.getOptions is not a function,这多半是因为sass-loader或者是less-loader引起的问题

2.sass-loader降级

我是在安装sass-loader之后,遇到了这个问题,主要就是版本不兼容,向下取版本就好了。我安装了npm:6.14.15,node:v14.18.1,vue-cli:@vue/cli 4.5.14

1
2
3
4
5
## 卸载高版本12.2.2
yarn remove sass-loader -S

## 安装低版本
yarn add sass-loader@10 -S

这里不仅仅是有sass的问题,还有less的问题,都是因为 webpack和loader的版本不兼容的问题。有的说是把less降级到5.0.0,降级到6.0.0,但是我降级之后,还是不可以。鉴于是版本问题,也鉴于是webpack的版本问题,这个有必要重新升级一下webpack了。

3.less-loader降级

在我启动的时候,出现了这个问题:./src/assets/less/JAreaLinkage.less TypeError: this.getOptions is not a function,我的版本:npm:6.14.15,node:v14.18.1,vue-cli:@vue/cli 4.5.14。

几乎所有的文章,都说是要降级,但是 实际上,我的

1
2
3
// 原先的版本
"less": "^3.9.0",
"less-loader": "^4.1.0",

【尝试】
(1) 降级less-loader

1
2
3
4
## 卸载
pnpm remove less-loader -D
## 安装
pnpm add less-loader@5.0.0 -D

(2) 降级sass
上面的less-loader解决之后,还有 antd-online-mini 也会报这个错误。由于目前 @vue/cli@4.5.12 所用的是 webpack4,发现 sass-loader的11.0.0和less-loader的8.0.0 版本需要 webpack5 ,所以需要将sass-loader的版本降到11以下,less-loader的版本降到8以下。

(3) 降级@vue/cli
重新安装了全局的@vue/cli,降到了 3.12.1,但是还是报错。

参考文章:
1.TypeError: this.getOptions is not a function
2.TypeError: this.getOptions is not a function 这里也是降级,但是我的版本本身就不是很高啊,才刚刚4.1.0
3.TypeError: this.getOptions is not a function less-loader安装的版本过高
4.Syntax Error: TypeError: this.getOptions is not a function
5.安装sass-loader后报错:TypeError: this.getOptions is not a function 解决办法:运行新命令,卸载旧版本,安装新版本。这里装了less 5.0.0版本
6.TypeError: this.getOptions is not a function 的解决(vue,react) 通过 npm uninstall less-loader 命令卸载原版本的 less-loader,然后 通过 npm install less-loader@5.0.0 命令下载降级版本的 less-loader,这个问题就可以解决了.
7.引入less 报错: this.getOptions is not a function less-loader@6.0.0这个是到了6.0版本,这不就是升级版本了吗?
8.less-loader 报错 TypeError: this.getOptions is not a function webpack和less-loader版本兼容问题导致的,需要降低版本。

3.升级vue项目

上面的两种方式我都没有解决,我觉得使用新的方式进行解决,我安装了 @vue/cli 然后创建了一个新的项目。

1
2
3
4
## 安装 @vue/cli 5.0.6 版本
pnpm add -g @vue/cli
## 创建项目,选择vue2
vue create test

获得到的package.js如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
{
"name": "test",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
"dependencies": {
"core-js": "^3.8.3",
"vue": "^2.6.14"
},
"devDependencies": {
"@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-service": "~5.0.0",
"eslint": "^7.32.0",
"eslint-plugin-vue": "^8.0.3",
"vue-template-compiler": "^2.6.14"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/essential",
"eslint:recommended"
],
"parserOptions": {
"parser": "@babel/eslint-parser"
},
"rules": {}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
]
}

然后将原先的其他依赖拷贝进来,修改配置文件文件。

参考文章:
1.今天我把vue2中webpack版本升级了 这里直接将vue2的webpack升级到了5.0
2.vue-cli升级 vue upgrade –next 方法进行升级,但是对我无效,我无法升级,因为会报错: command failed: yarn add @vue/cli-service@~5.0.8
3.全网最硬核的Ant-Design-Vue从Vue-cli迁移至Vite(一) 这里是直接从vue-cli升级到了vite
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。