javascript - 如何合并导入到不同 JS 组件的所有 .SCSS 文件并将它们输出到单个 .CSS 包?

标签 javascript node.js webpack sass webpack-4

我正在开发一个使用纯 JS(无框架)和 SCSS 并将其全部与 Webpack 捆绑在一起的项目。

结构大致是这样的:

│   index.html
│   index.js
│   webpack.config.js
│   
├───build
│       app.bundle.js
│       bundle.css
│       error.bundle.js
│       index.html
│                   
└───src
    ├───components
    │   │   App.js
    │   │   
    │   └───ErrorMessage
    │           error.scss
    │           ErrorMessage.js
    └───style
            footer.scss
            header.scss
            index.scss
            reset.scss

我唯一的入口点是初始化应用程序的 index.jsindex.scssApp.js 中导入。

在我将 ErrorMessage 的样式移动到单独的组件之前,一切都运行良好。

这是我的 webpack 配置:

const path = require('path');
const autoprefixer = require('autoprefixer');

module.exports = [{
  entry: {
    app: ['@babel/polyfill', './index.js']
  },
  output: {
    filename: '[name].bundle.js',
    chunkFilename: '[name].bundle.js',
    path: path.resolve(__dirname, 'build')
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: [
          {
            loader: 'babel-loader',
            options: {
              plugins: ['@babel/plugin-proposal-class-properties'],
              presets: ['@babel/preset-env']
            }
          }
        ]
      },
      {
        test: /\.scss$/,
        use: [
          {
            loader: 'file-loader',
            options: {
              name: 'bundle.css',
            },
          },
          { loader: 'extract-loader' },
          { loader: 'css-loader' },
          {
            loader: 'postcss-loader',
            options: {
              plugins: () => [autoprefixer()]
            }
          },
          {
            loader: 'sass-loader',
            options: {
              sassOptions: {
                includePaths: ['./node_modules']
              }
            }
          }
        ]
      }
    ]
  },
}];

我想做的是将该组件的样式直接导入 ErrorMessage.js 但仍然将其编译为 bundle.css 并保留单个条目观点。但是,当我运行 webpack 构建时,它只会将 error.css 编译为 bundle.css 文件。 有没有办法像那样解析所有 .scss 文件?

最佳答案

为什么不只创建 1 个入口点 scss 文件,然后将所有内容都包含到该 scss 文件中?然后你只需要将该入口文件导入到你的js文件中

下面是我的webpack配置引用

plugins: [
        new MiniCssExtractPlugin({
            filename: "[name].css",
            chunkFilename: "[id].css"
        })
    ],
    module: {
        rules: [{
                test: /\.scss$/,
                use: [
                    'style-loader',
                    MiniCssExtractPlugin.loader,
                    {
                        loader: "css-loader",
                        options: {
                            minimize: true,
                            sourceMap: true
                        }
                    },
                    {
                        loader: "sass-loader"
                    }
                ]
            }
        ]
    }

关于javascript - 如何合并导入到不同 JS 组件的所有 .SCSS 文件并将它们输出到单个 .CSS 包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58674604/

相关文章:

javascript - Angular 同位素 + 同位素不适用于我的网格

javascript - 如何使用 DOM 方法可靠地对数组进行子排序?

php - Socket.io 3 和 PHP 集成

reactjs - PrismJS 与 React : using babel-plugin-prismjs

Webpack splitChunks 插件 - 为什么设置 block 的优先级使其初始化异步?

javascript - 如何在 firebase 中保存用户的关注者? react native

javascript - 将本地化 ISO 日期格式设置为 hh :mm:ss

javascript - 从 express.js 中删除所有 header

javascript - 连接后忽略服务器端的 socket.emit?

webpack - 在 Vuejs 2 中使用引导日期时间选择器