Webpack 重复导入css,<style>引入了两次问题,sass全局变量配置

现象

全局样式被引入了两次,点击<style>...</style>指向的是同一位置。

分析

vue项目使用scss等预处理语言时,当使用$var全局变量时,需要指定一个公共的文件例如globalVariable.scss来存放所有公共变量,例如颜色,边距,全局混入等。

在.vue中使用,需要在scss-loader前增加sass-resources-loader来载入公共全局变量。

这样在.vue单文件中<style lang='scss'></style>标签中就可以直接使用$var来使用globalVariable.scss全局定义的变量了。

webpack配置如下

// webpack.config.js
module:{
    rules: [
        test: /\.scss$/,
        use: [
            'vue-style-loader',
            'css-loader',
            'sass-loader',
            {
                loader: 'sass-resources-loader',
                options: {
                    resources: path.resolve(__dirname, './globalVariable.scss') // 全局scss变量
                }
            } 
        ]
    ]
}

如上配置,如果在globalVariable.scss全局变量文件中定义了全局样式。然后在入口文件中也import这个全局变量文件的话,就会造成多次引入。

我的项目在sass-resources-loader中指定了全局样式index.scss,这个文件import ’globalVariable.scss‘全局变量。

webpack入口js中import ‘index.scss’;全局样式文件

sass-resources-loader中又指定了index.scss全局样式文件,造成两次引入。

解决

现在通过修改sass-resource-loader中指定为globalVariable.scss全局变量文件解决。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Vue 3中使用TypeScript和Sass配置换肤功能,可以按照以下步骤进行操作: 1. 安装依赖: 在项目根目录下打开终端,执行以下命令安装所需的依赖: ```bash npm install sass --save-dev npm install sass-loader --save-dev ``` 这将安装Sass解析器和Sass加载器。 2. 配置webpack: 在Vue 3中,使用了Vite作为默认的开发服务器和构建工具,不再使用webpack配置文件来自定义构建配置。但我们可以通过`vite.config.js`文件来进行一些自定义配置。 在项目根目录下创建`vite.config.js`文件,并添加以下内容: ```javascript import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' export default defineConfig({ plugins: [vue()], css: { preprocessorOptions: { scss: { additionalData: `@import "@/styles/variables.scss";` // 引入全局变量文件 }, }, }, }) ``` 上述配置中,我们使用`@vitejs/plugin-vue`插件来支持Vue相关的开发。在`css`选项中,我们使用`preprocessorOptions`来设置Sass配置,这里我们引入了一个全局变量文件`variables.scss`,你可以根据自己的需求来修改引入的文件路径。 3. 创建样式文件: 在项目的`src/styles`目录下创建一个为`variables.scss`的文件,并定义一些换肤所需的变量,例如: ```scss // variables.scss $primary-color: #00aaff; $secondary-color: #ff00aa; ``` 4. 在组件中使用样式: 在Vue组件中使用Sass样式时,可以直接在`<style>`标签中编写Sass代码,并使用定义的变量。例如: ```vue <template> <div class="app"> <h1 :style="{ color: primaryColor }">Hello World</h1> <button :style="{ background: secondaryColor }">Change Theme</button> </div> </template> <script lang="ts"> import { defineComponent } from 'vue'; export default defineComponent({ name: 'App', data() { return { primaryColor: 'var(--primary-color)', secondaryColor: 'var(--secondary-color)', }; }, }); </script> <style lang="scss"> .app { h1 { font-size: 24px; } button { padding: 10px; color: white; cursor: pointer; } } </style> ``` 在上述示例中,我们通过`:style`绑定属性来动态改变标题和按钮的样式,使用了Sass样式和定义的变量。 现在,你可以根据需要在Vue 3项目中使用TypeScript和Sass来实现换肤功能了。希望对你有所帮助!如有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值