uniapp static目录介绍 (import、uni.scss文件、app.vue应用配置文件使用方法)

static

首先我们要了解的一下uniapp项目中的static目录是什么的,static是项目用来存放静态资源用的,在我们uniapp项目编译的时候会一起加载,我们可以在static放我们项目中要用到的图片、视频等资源,或项目要用的的css文件、scss文件等等,但是当我们的东西多了之后,我们在编译运行项目的时候就会很慢,这是因为运行时需要加载你的static文件,所以我们推荐把我们的css、lass/scss等文件用一个common文件来存放,由于没有在static文件中,所以他运行的时候不会被加载,这是时候我们就需要使用@import导入我们需要的一些css、less/scss文件。

更多关于static目录的说明:工程简介 | uni-app官网

import

我们在项目的开发中通常会需要用到ref、onLoad等一下不属于自己的创建的东西或者是自己创建的一些自定义模块,在我们需要用到它们的时候就可以通过import来导入。

使用示例

如:

导入ref

<script setup>
import { ref } from "vue";
</script>

导入onLoad

<script setup>
import { onLoad } from "@dcloudio/uni-app";
</script>

 uni.scss

uni.scss文件主要的用处就是用于控制应用的整体风格样式,如按钮颜色、(文字字体、大小、颜色)、边框样式等,uni.scss文件在项目创建的时候就有一批预留的样式,注意:在此文件进行增删改样式都要重新运行项目,因为scss文件时预编译文件,只是再项目刚运行进行的预编译。

使用示例

再uni.scss尾部导入common的scss文件

导入后重新启动项目

@import "@/common/scss/customScss.scss"

如果需要使用uni.scss中的常用变量就需要再style中用 lang="scss"来声明,然后就可以直接使用uni.scss中的变量了 

<style lang="scss">
.box{
    color:$uni-text-color;
    }
</style>

app.vue

app.vue文件的作用就是用来监听应用声明周期、配置全局样式等,虽然说这是一个.vue文件,但是这个文件不能编写视图元素,注意:如果你需要用到应用生命周期函数的话,就要再此文件编写,因为再页面监听无效。

使用示例

如:

再common中编写一个应用于全局的.css样式文件,然后再app.vue中导入

<style>
	/*每个页面公共css */
	@import "@/common/css/customStyle.css";
</style>

导入之后我们只需要再customStyle.css中去进行增删改样式即可,不用再页面上为其添加css样式了

<think>我们正在解决一个特定的问题:在UniAppApp平台v3模式下,如果在js文件中引用SCSS文件(如`import './styles/iconfont.scss'`)会报错,需要改为在style内引用。 根据之前提供的引用内容,我们可以得到以下线索: 引用[2]提到:CSS文件或style标签内引用的图片路径可以使用相对路径,也可以使用绝对路径。但需要注意的是,有些小程序端CSS文件不允许引用本地文件(这里可能也适用于App平台)。 问题分析: 在UniApp中,我们通常会在js/ts文件中引入样式文件,但在App平台的v3模式下,这种做法可能会导致错误。因为v3模式下,App端的编译环境对模块引入有更严格的要求,尤其是在处理样式文件时。 解决方案: 我们需要将原本在js文件中引入SCSS的方式改为在style标签内通过@import引入。 具体步骤: 1. 移除js文件中的SCSS引入语句: 原本在js文件中可能有: ```javascript import './styles/iconfont.scss'; ``` 将其删除。 2. 在需要使用这些样式的页面的style标签中引入,或者在全局样式文件中引入(如App.vue的style中): - 如果每个页面都需要,可以在全局样式文件中引入(推荐): 在`App.vue`的`style`标签中添加: ```scss /* 在App.vue中全局引入 */ @import "./styles/iconfont.scss"; ``` - 如果只在特定页面使用,则在页面组件的`style`标签中引入: ```vue <style lang="scss"> @import "./styles/iconfont.scss"; /* 其他页面样式 */ </style> ``` 3. 注意路径问题:根据引用[2]的提示,路径可以使用相对路径或绝对路径。建议使用绝对路径(以@开头,指向项目根目录)来避免路径错误: ```scss @import "@/styles/iconfont.scss"; ``` 4. 如果项目使用scss,需要确保在项目中安装了sass相关依赖(通常uni-app项目会默认安装,如果没有,请安装): ``` npm install sass sass-loader -D ``` 5. 如果引入后图标没有显示,请检查字体文件的路径是否正确(在iconfont.scss文件中)。由于在scss文件中可能会引用字体文件(如woff、ttf等),这些文件的路径同样需要使用正确的相对路径或绝对路径。在scss文件中,可以使用相对路径(相对于当前scss文件)或绝对路径(以~@开头的路径,例如:`~@/static/fonts/iconfont.ttf`)来引用字体文件。 示例:在iconfont.scss中,可能需要修改@font-face中的路径: ```scss @font-face { font-family: 'iconfont'; src: url('~@/static/fonts/iconfont.ttf') format('truetype'); } ``` 6. 重新编译运行项目,检查问题是否解决。 注意事项: -App平台v3模式下,js文件中直接导入scss文件不被支持,因此必须避免。 - 全局引入和页面引入的选择:如果图标字体在多个页面使用,建议在App.vue中全局引入;如果仅个别页面使用,则按需引入以避免增加每个页面的样式体积。 如果按照以上步骤操作后仍然有问题,可能是由于其他原因,比如字体文件路径错误或者字体文件格式不支持,需要进一步检查。 相关问题: 1. 如何在UniApp中全局引入scss样式文件? 2. UniApp中如何正确使用图标字体(iconfont)? 3.UniApp使用scss时,如何解决字体文件路径问题? 4. UniApp App平台v3模式对样式引入有哪些限制? 请尝试以上方法,一般可以解决在js文件中引入scss报错的问题。 </think>### App平台v3模式下解决SCSS引用报错问题 在UniApp App平台v3模式下,直接在JS文件中引用`.scss`文件会报错,需改为在`<style>`标签内引用。以下是完整解决方法: #### 1. 移除JS文件中的SCSS引用 将JS文件中以下类型的引用直接删除: ```javascript // ❌ 错误方式(导致报错) import './styles/iconfont.scss'; require('./styles/iconfont.scss'); ``` #### 2.Vue组件中通过`<style>`引入(推荐) 在需要使用图标的组件内添加: ```vue <style lang="scss"> /* ✅ 正确方式 */ @import "./styles/iconfont.scss"; </style> ``` #### 3. 配置全局样式(多组件复用) 在`App.vue`中全局引入(所有页面生效): ```vue <style lang="scss"> /* ✅ 全局引入 */ @import "@/styles/iconfont.scss"; </style> ``` #### 4. 路径引用规则(关键) 根据引用[2]的路径规则: ```scss /* ✅ 绝对路径(推荐) */ @import "/styles/iconfont.scss"; @import "@/styles/iconfont.scss"; /* ✅ 相对路径 */ @import "../../styles/iconfont.scss"; ``` #### 5. 图标使用示例 HTML模板中使用图标: ```vue <template> <text class="iconfont"></text> <!-- 引用[1]示例 --> </template> ``` ### 注意事项 1. **SCSS预处理器依赖** 确保已安装`sass`和`sass-loader`: ```bash npm install sass sass-loader@10.1.1 -D ``` 2. **文件路径验证** 检查`iconfont.scss`文件是否存在,路径是否正确: ``` /项目根目录/styles/iconfont.scss ``` 3. **Webpack配置检查** 在`vue.config.js`中添加别名(如报路径错误): ```js const path = require('path') module.exports = { configureWebpack: { resolve: { alias: { '@': path.resolve(__dirname, 'src') } } } } ``` 4. **图标字体路径修正** 在`iconfont.scss`内部检查字体文件路径: ```scss @font-face { font-family: 'iconfont'; src: url('~@/static/fonts/iconfont.ttf') format('truetype'); /* 引用[2]路径规范 */ } ``` ### 替代方案:通过main.js全局导入 若必须JS导入,使用CSS替代SCSS: ```js // main.js import '@/styles/iconfont.css' /* 将.scss转为.css文件 */ ``` > **原理说明**:App平台v3模式使用webpack5编译,JS文件直接导入SCSS会破坏样式隔离机制。`.vue`文件的`<style>`经过特殊处理,支持SCSS预编译[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值