看了一下 uView 文档,使用 Vue CLI 创建了一个 uni-app 项目,因为 uView 有针对 Vue CLI 的空白项目包。
创建完,安装好依赖,执行 npm run serve
运行项目时报错:
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
安装依赖,然后报错:
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
:
"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
文件:
"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
依赖:
// 安装node-sass
npm i node-sass -D
// 安装sass-loader
npm i sass-loader -D
npm 安装 uView
:
npm install uview-ui
配置 uView :
1. 引入 uView 主 JS 库
在项目根目录中的 main.js
中,引入并使用 uView 的 JS 库,注意这两行要放在 import Vue
之后。
// main.js
import uView from "uview-ui";
Vue.use(uView);
2. 在引入 uView 的全局 SCSS 主题文件
在项目根目录的 uni.scss
中引入此文件。
/* uni.scss */
@import 'uview-ui/theme.scss';
3. 引入 uView 基础样式
注意!
在 App.vue
中首行的位置引入,注意给 style
标签加入 lang="scss"
属性
<style lang="scss">
/* 注意要写在第一行,同时给style标签加入lang="scss"属性 */
@import "uview-ui/index.scss";
</style>
4. 配置 easycom 组件模式
此配置需要在项目根目录的 pages.json
中进行。
温馨提示:uni-app 为了调试性能的原因,修改 easycom 规则不会实时生效,配置完后,您需要重启 HX 或者重新编译项目才能正常使用 uView 的功能。
请确保您的 pages.json
中只有一个 easycom 字段,否则请自行合并多个引入规则。
// pages.json
{
"easycom": {
"^u-(.*)": "uview-ui/components/u-$1/u-$1.vue"
},
// 此为本身已有的内容
"pages": [
// ......
]
}
最终问题解决。
注:配置完如果还报错,尝试把 node_modules
文件删除,然后 yarn
或者 npm i
重新安装依赖即可。
未经允许不得转载