Webpack 多次导入相同的样式

Posted

技术标签:

【中文标题】Webpack 多次导入相同的样式【英文标题】:Webpack imports the same styles multiple times 【发布时间】:2017-02-02 04:20:49 【问题描述】:

我注意到,当我在 sass 文件中 @import 样式时,我的 webpack 配置多次将相同的样式导入到 head <style> 标签中。

我认为这是因为我的全局样式文件如下所示:

@import url('https://fonts.googleapis.com/icon?family=Material+Icons');
@import '~material-design-lite/src/material-design-lite.scss';

我稍后在多个其他组件样式文件中导入样式:

@import 'global';

是否有一些我遗漏的配置? 我以为我可以通过 import 将 index.js 文件中的全局样式文件导入,但是这些导入必须首先出现,并且不知何故我无法通过 webpack 实现。

【问题讨论】:

尝试将您的 mixins/变量分离到一个单独的 .scss 中,您可以将其分别导入全局和组件中。 我使用 mdl(材料设计语言)从他们的节点模块包中提供的变量。不幸的是,我无法拆分该文件 他们不单独公开变量吗?检查节点模块目录 是的,我才意识到,它们只提供变量/mixin,不会编译成css,所以如果它们被多次导入也没关系。我将不得不配置 webpack 以删除巨大的许可证注释... Same CSS is injected into html over and over again的可能重复 【参考方案1】:

Sass 中的@import 从 2022 年开始贬值,但新的 @use 旨在解决这个问题。

如果你有一个依赖全局变量(颜色、断点等)的大文件系统,它似乎有缺点,虽然我还没有让它在我的工作系统上运行,但如果你有一个较小的文件系统,它是绝对值得研究@use 和@forward。

看起来将@import 更改为@use 可以解决重复问题。

【讨论】:

【参考方案2】:

@import 替换为新的@use,所有内容都应该只导入一次

https://sass-lang.com/documentation/at-rules/import

【讨论】:

【参考方案3】:

我认为这是因为您将文件命名为 global.scss 而不是 _global.scss。下划线告诉编译器这是一个部分的而不是为它创建一个文件。

【讨论】:

这就是我讨厌网络的原因。【参考方案4】:

这不是 webpack 的问题,更多的是你对 CSS 的使用。 由于 CSS 资源是静态编译的,因此每个导入 global 的样式表中都有一个副本。 您可以使用 Less 和 @import (reference) statement,或者如果您更喜欢 CSS,则单独加载它,不要每次都导入它。

【讨论】:

sass 可以实现同样的目标吗? 我不知道。我对 sass 所做的只是导入带有变量定义的 scss 文件,因为这是在应用程序中导入任何内容的唯一真正原因。除此之外,只需在您的主应用程序或 scss 文件中导入每个(外部)样式表。 好的,现在看,你是对的。也许是我首先错误地使用了导入

以上是关于Webpack 多次导入相同的样式的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能将 primereact 样式导入 webpack 4 react 样板?

react js上的样式导入(使用webpack)

WebPack 为导入的样式表的类添加下划线,从而破坏反应组件的样式

为 webpack 导入样式文件时,Linter 显示“no-unused-vars”

Webpack 样式加载器未将样式注入 DOM

vuecli webpack 外部js 怎么导入