Laravel mix - 更改生产 CSS 输出选项

标签 laravel laravel-mix sass-loader

我正在尝试更改 webpack.mix.js 中的 CSS 输出样式,但它似乎只影响开发版本。如何将 outpoutStyle 选项应用于生产版本?

这里是我在 webpack.mix.js 文件中的代码,更改“outputstyle”的值只会影响开发版本。

mix.js('resources/js/app.js', 'public/js')
    .sass('resources/sass/app.scss', 'public/css', {
        outputStyle : 'expanded'
    })
    .copy(`resources/images`, `public/images`, false);

laravel-mix:版本 5.0.4

sass-loader:版本7.1.0

编辑 - 附加信息:

我试图解决的问题是,我的代码在开发人员构建中运行良好,但在运行生产构建时却变得梨形。我怀疑这与生产构建的方式有关:

.selector-1 {
    background-color: green;
    color: red;
}

.selector-2 {
    background-color: blue;
    color: red;
}

并将其编译为:

.selector-1 {
    background-color: green;
}

.selector-1, .selector-2 {
     color: red;
}

.selector-2 {
    background-color: blue;
}

就我而言,这是不良行为,我相信它会导致我的 CSS 自定义属性出现范围问题。编译后的代码有数千行长,因此我无法查明确切的问题 - 但我注意到开发版本并没有这样做,并且一切正常。

基本上,我有这样的东西,我用它来设置主题:

:root {
 —theme-base: red;
}

.theme-green {
 —theme-base: green;
}

在开发模式下一切正常……但在产品模式下,某些元素继承了错误的颜色值。

最佳答案

事实证明,您尝试输出的特定 CSS 非常关键。从你的私信中我发现它与边框有关,你的原始代码是这样的:

.selector-1 {
  border-top-width: 2px;
  border-top-style: solid;
  border-color: get-color(base, body);
}

在生产模式下编译为

.selector-1 {
  border-color: var(--color-base-body)
}

.selector-1 {
  border-top: 2px solid;
}

问题是,如果这些 border 属性位于不同的类选择器中,即使它们相同,浏览器也不知道如何处理它。我们需要一种方法将所有相关的边框属性包含在一个选择器中。就像这样:

.selector-1 {
  border: 2px solid get-color(base, body);
  border-width: 2px 0 0;
}

编译为

.u-border-top-2 {
  border: solid var(--color-base-body);
  border-width: 2px 0 0;
}

...在浏览器中正确呈现。

我不确定这是否是 sass-loader 中的错误,或者新版本是否修复了它 - 乍一看,它看起来像是正确的行为,但边框的情况并不那么严重。

关于Laravel mix - 更改生产 CSS 输出选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62634884/

相关文章:

javascript - Laravel Mix 中的自定义 less-loader

css - webpack + sass-loader : Invalid CSS after "...-width: $small)": expected "{", 是 ";"

php - 如何在 Laravel 关系中实现 SUM()?

php - 如何在 Laravel 中禁用注册新用户

php - SQLSTATE[23000] : Integrity constraint violation: 1052 Column 'status' in where clause is ambiguous

laravel - 使用 Laravel MIX 将多个 CSS 编译成一个 CSS

laravel - 在 laravel vue 项目中使用 laravel mix,如何在所有组件中包含 scss 文件?

node.js - Sass-loader 与 Webpack、React 和 Babel 不工作

Webpack 将 CSS 加载到单独的 <style> 标签中

php - Eloquent 中与分类法的多对多关系