uView UI框架Vue CLI空白项目运行报错:this.getOptions is not a function的解决方法

2021-04-25 15:50:27 浏览数 (1)

看了一下 uView 文档,使用 Vue CLI 创建了一个 uni-app 项目,因为 uView 有针对 Vue CLI 的空白项目包。

创建完,安装好依赖,执行 npm run serve 运行项目时报错:

代码语言:javascript复制
Failed to compile with 1 error                                                                          22:52:17

Failed to resolve loader: sass-loader
You may need to install it.

执行 npm i sass-loader --save-dev 安装依赖,然后报错:

代码语言:javascript复制
Failed to compile with 1 error                                                                          23:05:07

error  in ./src/components/u-cell-group/u-cell-group.vue?vue&type=style&index=0&id=65df75f8&lang=scss&scoped=true&
Syntax Error: TypeError: this.getOptions is not a function

我查了一下,是 sass-loader 版本的事:

安装完可以看到 package.json 里的 sass-loader 版本是 ^11 :

代码语言:javascript复制
"sass-loader": "^11.0.1",

很多人说, [email protected]/* <![CDATA[ */!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-yjshash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-yjsemail')){for(e='',r='0x' a.substr(0,2)|0,n=2;a.length-n;n =2)e ='%' ('0' ('0x' a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/* ]]> */ 似乎不适用 [email protected]/* <![CDATA[ */!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-yjshash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-yjsemail')){for(e='',r='0x' a.substr(0,2)|0,n=2;a.length-n;n =2)e ='%' ('0' ('0x' a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/* ]]> */ 。安装 [email protected]/* <![CDATA[ */!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-yjshash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-yjsemail')){for(e='',r='0x' a.substr(0,2)|0,n=2;a.length-n;n =2)e ='%' ('0' ('0x' a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/* ]]> */ ,就可以正常工作了。

修改 package.json 文件:

代码语言:javascript复制
"sass-loader": "^10.1.1",

最好是删除 node_modules 文件夹,然后执行 yarn 或者 npm i 重新安装依赖。

依旧报错:

代码语言:javascript复制
Failed to compile with 1 error                                                                          23:15:25

error  in ./src/components/u-cell-group/u-cell-group.vue?vue&type=style&index=0&id=65df75f8&lang=scss&scoped=true&
Syntax Error: TypeError: Cannot read property 'toString' of undefined

继续解决:(正片开始)

*uView Vue CLI 空白项目版本的安装及配置

Vue CLI 创建 uni-app 项目:

首先安装 Vue CLI ,如果没有安装过的话:

代码语言:javascript复制
npm install -g @vue/cli

创建 uni-app

使用正式版(对应 HBuilderX 最新正式版)

代码语言:javascript复制
vue create -p dcloudio/uni-preset-vue my-project

使用 alpha 版(对应 HBuilderX 最新 alpha 版)

代码语言:javascript复制
vue create -p dcloudio/uni-preset-vue#alpha my-alpha-project

此时,会提示选择项目模板,选择 默认模板 即可。

安装 uView 所需依赖

安装 node-sass 依赖:

代码语言:javascript复制
// 安装node-sass
npm i node-sass -D

// 安装sass-loader
npm i sass-loader -D

npm 安装 uView

代码语言:javascript复制
npm install uview-ui

配置 uView :

1. 引入 uView 主 JS 库

在项目根目录中的 main.js 中,引入并使用 uView 的 JS 库,注意这两行要放在 import Vue 之后。

代码语言:javascript复制
// main.js
import uView from "uview-ui";
Vue.use(uView);

2. 在引入 uView 的全局 SCSS 主题文件

在项目根目录的 uni.scss 中引入此文件。

代码语言:javascript复制
/* uni.scss */
@import 'uview-ui/theme.scss';

3. 引入 uView 基础样式

注意!

App.vue 中首行的位置引入,注意给 style 标签加入 lang="scss" 属性

代码语言:javascript复制
<style lang="scss">
  /* 注意要写在第一行,同时给style标签加入lang="scss"属性 */
  @import "uview-ui/index.scss";
</style>

4. 配置 easycom 组件模式

此配置需要在项目根目录的 pages.json 中进行。

温馨提示:uni-app 为了调试性能的原因,修改 easycom 规则不会实时生效,配置完后,您需要重启 HX 或者重新编译项目才能正常使用 uView 的功能。

请确保您的 pages.json 中只有一个 easycom 字段,否则请自行合并多个引入规则。

代码语言:javascript复制
// pages.json
{
  "easycom": {
    "^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
  },
	
  // 此为本身已有的内容
  "pages": [
    // ......
  ]
}

最终问题解决。

注:配置完如果还报错,尝试把 node_modules 文件删除,然后 yarn 或者 npm i 重新安装依赖即可。

未经允许不得转载

0 人点赞