vue.js - sass-loader additionalData/prependData/data bloats 包大小

标签 vue.js webpack sass vuejs2 laravel-mix

我正在使用 Vue2 和 laravel-mix,我希望我的变量可以在全局范围内访问。我最终找到了这个:

mix.webpackConfig({
    module: {
        rules: [
            {
                test: /\.scss$/,
                use: [
                    {
                        loader:  'sass-loader',
                        options: {
                            //this might be "data" or "prependData" depening on your version
                            additionalData: `@import "./resources/js/styles/variables.scss";`
                        }
                    }
                ]
            }
        ]
    }
})

这确实使我的变量可以全局访问,但本质上是将 variables.scss 复制到每个 vue 组件中,这大大增加了我的包大小。

我怎样才能避免这种情况?

编辑:这只是一个问题,当导入的文件相对较大时。在我的项目中,导入的文件本身导入了一个主题 scss(以访问主题变量),它最终将整个东西复制到我需要变量的任何地方。
我通过在单独的文件中定义自定义变量并在“覆盖变量”文件中使用这些变量来解决此问题,如下所示:
自定义变量.scss

$red: #ff0000;

覆盖变量.scss

import 'theme.scss'; //this bloated my project
import 'custom-variables';

$--theme-red: $red

当我在我的 vue 组件中需要这种主题颜色时,我只是导入了 custom-variables.scss 而不是 overwriting-variables.scss
这确实解决了我的腹胀问题,但没有完全解决问题,我的项目中仍然有多个 custom-variables.scss 实例,这无关紧要,因为它真的很小。所以我仍然很乐意听到其他解决方案!

最佳答案

您需要将您的函数、变量和混入与实际的 CSS 规则分开。

These files will be imported and available to every component you write, which is great for things like variables, functions, or mixins, but you should avoid any actual CSS rules. Adding CSS rules to your shared Sass files will import those rules into every component and bloat your project. For global CSS rules, create a separate file and import it into your main App.vue file instead.

来源:https://austingil.com/global-sass-vue-project/

关于vue.js - sass-loader additionalData/prependData/data bloats 包大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68304133/

相关文章:

javascript - 在 Vue 组件中链接不同的 API 调用,包括带有 for 循环的调用

typescript - 如何使用 noImplicityAny 和不使用 allowJs 在 TS 中导入 JS

javascript - 从 gulp 切换到 webpack 来处理 SCSS 文件,需要帮助设置

javascript - 如何在同一个地方设置 JavaScript 和 SASS 常量?

css - 在多张纸上管理sass中的半径值

vue.js - 如何使用 vuetify 使字体大小响应?

laravel - Web 开发堆栈 - 疯狂 --- 最佳实践架构和部署?

webpack - 在 Windows 上的 Ubuntu 上的 Bash 中使用 watch 运行 webpack 构建一次并退出

reactjs - Webpack:./src/index.tsx 中的错误模块未找到:错误:无法解析 './App' 中的 '...'

javascript - VueJS 通过节点插件返回循环数据值