返回

Webpack 黑魔法:CSS Entry 的魔法本质

前端

Webpack 的 Entry 一直都是 js 文件,如果想要输出 css 文件,只能在 js 文件里导入 css。但今天,我们将探索一个惊人的秘密:Webpack 其实支持 css 作为 entry,这意味着你可以任意输出 css 文件,而无需在 js 文件中导入 css。现在,我们就来看看这个神奇的黑魔法是如何实现的。

首先,你需要使用 CSS Module,它允许你在 css 文件中使用 import 语句。通过这种方式,你可以像导入 js 模块一样导入 css 模块。例如,你可以创建一个名为 style.css 的文件,其中包含以下代码:

.my-class {
  color: red;
}

然后,你在 js 文件中导入 style.css 文件,如下所示:

import './style.css';

现在,当你运行 webpack 时,它将把 style.css 文件编译成一个单独的 css 文件。这样,你就可以像普通 js 文件一样导入 css 文件,而无需任何额外的配置。

当然,这只是实现 CSS Entry 的第一步。为了让 css 文件具有 js module 的功能,你需要使用 Style Loader 和 Mini CSS Extract Plugin 这两个插件。Style Loader 将 css 文件加载到 DOM 中,而 Mini CSS Extract Plugin 将 css 文件提取到单独的文件中。

通过使用这两个插件,你可以让 css 文件像 js module 一样工作。你可以在 css 文件中使用 import 语句来导入其他 css 文件,也可以在 css 文件中使用 export 语句来导出 css 变量。例如,你可以创建一个名为 variables.css 的文件,其中包含以下代码:

:root {
  --primary-color: red;
}

然后,你在另一个 css 文件中导入 variables.css 文件,如下所示:

import './variables.css';

.my-class {
  color: var(--primary-color);
}

现在,当你运行 webpack 时,它将把这两个 css 文件编译成一个单独的 css 文件。这样,你就可以像使用 js module 一样使用 css module。

总之,Webpack 中的 CSS Entry 是一个非常强大的功能,它可以让你以一种非常灵活的方式来管理你的 css 文件。通过使用 CSS Module、Style Loader 和 Mini CSS Extract Plugin 这三个工具,你可以让 css 文件像 js module 一样工作,并可以任意输出 css 文件。这将为你带来更多的自由和灵活性,让你可以创建出更加复杂的 Web 应用。