使用vue3+vite+scss+element-plus构建项目。
同时使用elementPlus的自定义命名空间和自定义主题,在打包的时候报错
代码如下:
// styles/element/theme.scss
$lb-namespace: 'lb';
@forward 'element-plus/theme-chalk/src/mixins/config.scss' with (
$namespace: $lb-namespace
);
@forward 'element-plus/theme-chalk/src/common/var.scss' with (
$colors: (
'primary': (
'base': #3cd7da,
'light-9': rgb(236 251 251 / 33%)
),
'info': (
'base': #16fcff
)
),
$bg-color: (
'': #ffffff00,
'overlay': #20577a
),
$dialog: (
'padding-primary': 12px
),
$fill-color: (
'': #344866,
'light': #f5f7fa2b
),
$text-color: (
'primary': #16fcff,
'regular': #16fcff,
'secondary': #16fcff,
// 'placeholder': darken(#16FCFF, 10%),
// 'disabled': darken(#16fcff, 20%)
),
$message: (
'close-size': 30px
),
$input: (
'bg-color': #ffffff00
)
);
// styles/element/light-blue.scss
@use './theme.scss' as *;
.#{$namespace}-dialog {
background-size: cover;
padding: 0;
background-color: hsla(0, 0%, 100%, 0);
.#{$namespace}-dialog__header {
background-image: url('../../assets/images/dialog-header-bg.png');
padding: map-get($map: $dialog, $key: padding-primary);
background-size: unset;
background-repeat: round;
}
.#{$namespace}-dialog__body {
background: url('../../assets/images/dialog-body-bg.png') round;
padding: 10px map-get($map: $dialog, $key: padding-primary);
padding-bottom: 2px;
}
.#{$namespace}-dialog__footer {
background: url('../../assets/images/dialog-footer-bg.png') round;
padding: 3px map-get($map: $dialog, $key: padding-primary) map-get($map: $dialog, $key: padding-primary);
}
// footer带上分割线
&.footer-top-line {
.#{$namespace}-dialog__footer {
border-top: 1px solid map-get($text-color, regular);
padding-top: 10px;
}
}
}
在vite.config.ts中引入
css: {
preprocessorOptions: {
scss: {
javascriptEnabled: true,
// 目前版本sass已抛弃@import命令,改用@use
additionalData: `
@use "@mb/styles/element/light-blue.scss" as *;
`,
api: 'modern-compiler'
}
}
}
全局仅此处一个地方引入。
请问打包出现报错的原因是什么,如何修改。
希望打包时不再出现上述报错。
修改后如下所示。可以正常打包,但是样式失效。比如dialog
// main.ts
// css
import '@mb/styles/element/light-blue.scss'
// vite.config.ts
export default ({ mode }: ConfigEnv): UserConfigExport => {
return {
plugins: [
AutoImport({
resolvers: [
ElementPlusResolver({
// 自动引入修改主题色添加这一行,使用预处理样式
// 不添加将会导致使用ElMessage,ElNotification等组件时默认的主题色会覆盖自定义的主题色
importStyle: 'sass'
})
],
imports: ['vue', 'vue-router', 'vue-i18n', 'pinia'],
dts: './types/auto-imports.d.ts',
eslintrc: {
enabled: false,
// filepath: '.eslintrc-auto-import.json',
globalsPropValue: true
}
}),
Components({
resolvers: [
ElementPlusResolver({
// 按需引入修改主题色添加这一行,使用预处理样式
importStyle: 'sass'
})
],
directoryAsNamespace: true,
dts: './types/components.d.ts'
}),
ElementPlus({
useSource: true
})
],
css: {
preprocessorOptions: {
scss: {
javascriptEnabled: true,
// 目前版本sass已抛弃@import命令,改用@use
api: 'modern-compiler'
}
}
}
}
}
这个错误发生的主要原因是 SCSS 中的循环引用:
我建议
首先,修改引入自定义样式的方式。在移除vite.config.ts中的additionalData后,需要确保样式被正确导入和优先级足够高。
// main.ts
// 确保自定义样式在Element Plus之前导入
import '@mb/styles/element/index.scss'; // 新增一个索引文件
// 然后再导入Element Plus组件库
import ElementPlus from 'element-plus';
styles/element/index.scss
// styles/element/index.scss
@use './theme.scss';
@use './light-blue.scss';
@use 'element-plus/theme-chalk/src/index.scss' as *;
修改 theme.scss 文件,尝试增加
// 导出命名空间以便其他文件使用
:export {
namespace: $lb-namespace;
}
@forward 'element-plus/theme-chalk/src/mixins/config.scss' with (
$namespace: $lb-namespace
);
应用程序入口处配置Element Plus以使用自定义命名空间
app.use(ElementPlus, {
// 指定命名空间
namespace: 'lb'
});
按照在symfony2中加载应用程序的自定义配置文件时发布的建议,我陷入了名称空间问题。 在中,我有两个文件: 上诉。php: 和Configuration.php: 似乎我犯了某种错误,将文件命名为正在执行: 结果: PHP致命错误:在/var/www/dev.investmentopportunities中找不到类“AppBundle\DependencyInjection\Configura
我正在尝试将管道分隔字符串转换为xml,这很好。但是,我没有得到我在下面展示的实际输出。在我的输出中,父标记与包名一起生成,它也没有生成我想要的名称空间。你能帮我把平面文件转换成我期望的精确输出吗。 CamelConfig。JAVA ConverterRoute。JAVA 来源txt Test.java 输出 测验xml 预期产量 测验xml
本文向大家介绍thinkphp autoload 命名空间自定义 namespace,包括了thinkphp autoload 命名空间自定义 namespace的使用技巧和注意事项,需要的朋友参考一下 使用thinkPHP过程中,一些自定义的类库和第三方类库需要找一个合适的位置放置,放到系统默认的org文件夹感觉不太好,破坏了thinkPHP的原生目录。 就看了一下官方手册,可以在模块或者应用的
问题内容: 除了包级别注释外,还有其他方法可以使用注释来控制自定义名称空间前缀。 可以在元素级别完成吗?也可能有一个带有多个前缀的名称空间吗? 问题答案: 您实际上想做什么?为什么名称空间前缀对您很重要? 对于命名空间前缀,没有标准的元素级注释。 我知道的控制名称空间前缀的选项是: 你已经提到过。 提供习俗。 XML的低级处理(例如,在StAX,SAX或DOM级别)。 我也可以想象: / 通常使用
打开主题配置 选一个自己喜欢的主题吧
自定义主题 Element 默认提供一套主题,CSS 命名采用 BEM 的风格,方便使用者覆盖样式。我们提供了四种方法,可以进行不同程度的样式自定义。 主题编辑器 使用在线主题编辑器,可以修改定制 Element 所有全局和组件的 Design Tokens,并可以方便地实时预览样式改变后的视觉。同时它还可以基于新的定制样式生成完整的样式文件包,供直接下载使用(关于如何使用下载的主题包,请参考本节
uView目前可以自定主题色,字体颜色,边框颜色等,所有组件内部的样式,都基于同一套主题,比如您修改了primary主题色,所有用到了primary颜色 的组件都会受影响。 教程 可以在打开的颜色拾取器中输入或者选择颜色,再点"确定"按钮即可。 颜色配置完后,在页面底部下载文件,会得到一个名为uview.theme.scss的文件。 将文件复制到项目的公共目录(视情况而定)中,再在项目根目录的un
Element Plus 默认提供一套主题,CSS 命名采用 BEM 的风格,方便使用者覆盖样式。我们提供了四种方法,可以进行不同程度的样式自定义。 仅替换主题色 如果仅希望更换 Element Plus 的主题色,推荐使用在线主题生成工具。Element Plus 默认的主题色是鲜艳、友好的蓝色。通过替换主题色,能够让 Element Plus 的视觉更加符合具体项目的定位。 使用上述工具,可以