导入多个.scss文件时,如何在html头中仅包含一个CSS文件?

山姆

我的网站的结构看起来像

src/
    components/
        Footer/
            index.jsx
            style.scss
        Header/
            index.jsx
            style.scss
        Navbar/
            index.jsx
            style.scss
...

在我的每个index.jsx文件中,都有文件import './style.scss'

我最近开发Gatsby网站上,即使我可能有几十个包含的组件,我的头部也只能看到一个样式标签import ./style.scss

在此处输入图片说明

我现在正在开发一个非盖茨比,React和Webpack网站,当我的组件包含import ./style.scss大量时间时,使用相同的方法,但是看起来每个导入的样式文件都有一个样式标签。

在此处输入图片说明

我想知道盖茨比(Gatsby)的作用,以及如何在非盖茨比(Natsby)网站中包含相同类型的功能


更新

所以看起来在安装MiniCssExtractPlugin之后我能够将所有的scss文件分组为一个css文件

然后从更改我的webpack.config

      ...
      module: {
        rules: [
          ...
          {
            test: /\.(scss|css)$/,
            use: [
              'style-loader', // creates style nodes from JS strings
              {
                loader: 'css-loader', // translates CSS into CommonJS
                options: {
                  importLoaders: 1
                }
              },
              'postcss-loader', // post process the compiled CSS
              'sass-loader' // compiles Sass to CSS, using Node Sass by default
            ]
          },
       ...

成为

    const MiniCssExtractPlugin = require("mini-css-extract-plugin");
    ...

      module: {
        rules: [
          ...
          {
            test: /\.(scss|css)$/,
            use: [
              MiniCssExtractPlugin.loader, // creates style nodes from JS strings
              {
                loader: 'css-loader', // translates CSS into CommonJS
                options: {
                  importLoaders: 1
                }
              },
              'postcss-loader', // post process the compiled CSS
              'sass-loader' // compiles Sass to CSS, using Node Sass by default
            ]
          },
          ...
          plugins: [
              ...
              new MiniCssExtractPlugin({
                  filename: "style.css",
                  chunkFilename: "[name].css"
              })
          ]
          ...

但是控制台中有很多警告,如下所示

有谁知道如何解决这些警告?

    [./node_modules/css-loader/dist/runtime/api.js] 2.46 KiB {mini-css-extract-plugin} [built]
Child mini-css-extract-plugin node_modules/css-loader/dist/cjs.js??ref--5-1!node_modules/postcss-loader/dist/cjs.js!node_modules/sass-loader/dist/cjs.js!src/components/comp1/style.scss:    
    Entrypoint mini-css-extract-plugin = *
    [./node_modules/css-loader/dist/cjs.js?!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./src/components/comp1/style.scss] ./node_modules/css-loader/dist/cjs.js??ref--5-1!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./src/components/comp1/style.scss 1.85 KiB {mini-css-extract-plugin} [built]
    [./node_modules/css-loader/dist/runtime/api.js] 2.46 KiB {mini-css-extract-plugin} [built]
Child mini-css-extract-plugin node_modules/css-loader/dist/cjs.js??ref--5-1!node_modules/postcss-loader/dist/cjs.js!node_modules/sass-loader/dist/cjs.js!src/components/comp2/style.scss:    Entrypoint mini-css-extract-plugin = *
    [./node_modules/css-loader/dist/cjs.js?!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./src/components/comp2/style.scss] ./node_modules/css-loader/dist/cjs.js??ref--5-1!./node_modules/postcss-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./src/components/comp2/style.scss 942 bytes {mini-css-extract-plugin} [built]    
    [./node_modules/css-loader/dist/runtime/api.js] 2.46 KiB {mini-css-extract-plugin} [built]
费兰·布埃鲁

这项工作是由webpack完成的,而不是由Gatsby完成的。当然,Gatsby是自定义实现的扩展,但是您可以通过添加自定义webpack配置将相同的行为导入另一个项目(也可以在Gatsby中进行)。

webpack使用代码拆分技术捆绑了所有JavaScript,JSON和CSS文件(默认情况下不支持SCSS,应通过添加自定义webpack的配置或通过插件来实现)文件这使您可以将代码划分为几个捆绑包,这些捆绑包可以根据需要或请求进行加载。

另外,可能对您有用的一件事是使用主要文件收集一些导入。鉴于:

src/
    components/
        Footer/
            index.jsx
            style.scss
        Header/
            index.jsx
            style.scss
        Navbar/
            index.jsx
            style.scss

您可以在/src/styles名为styles.scssand的文件下创建

@import 'components/Footer/style';
@import 'components/Header/style';
@import 'components/Navbar/style';

然后将文件导入包含其他文件的顶级组件中。


更新:

您正在讨论的警告是由于样式中的导入顺序错误所致由于webpack将所有这些样式分块,但是它们会产生警告,因此并不重要。有一个称为的属性ignoreOrder(默认设置为false)。您可以通过以下方式修复它:

const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
  plugins: [
    new MiniCssExtractPlugin({
      ignoreOrder: true, // here
    }),
  ],
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: [MiniCssExtractPlugin.loader, 'css-loader'],
      },
    ],
  },
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章