Webpack SCSS 配置

Webpack SCSS config

我有以下 webpack 设置:

let config= {
    mode: 'development',
    entry:  {
        'templates': '/usr/local/var/www/project/src/ts/entry/templates.ts',
        'templates2': '/usr/local/var/www/project/src/ts/entry/templates2.ts',
        'main_scss': '/usr/local/var/www/project/src/sass/entry/main_scss.scss',
        'templates': '/usr/local/var/www/project/src/sass/entry/templates.scss'
    },
    output: {
        path:  path.resolve(__dirname, 'public/assets'),
        filename: '[name].bundle.js'
    },
    module: {
        rules: [
            {
                test: /\.(ts)$/,
                use: [
                    'ts-loader',
                ],
            },
            {
                test: /\.(scss)$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    'css-loader',
                    'sass-loader',
                ],

            },
        ]
    },
    plugins:[
        new MiniCssExtractPlugin({
            filename: "[name].css",
        })
    ]


};

结果是一个文件夹,每个 .ts 文件有一个 .js 文件,每个 .s 文件有 2 个文件css。 (main_scss.scss 结果为 main_scss.bundle.js 和 main_scss.css)

为什么?我希望将 .scss 文件捆绑到 .css 中。

谢谢 亚龙

这是因为您指定有多个输出包即每个入口点一个包。此外,每个包是唯一命名,基于每个入口点的文件名,如以下代码行所指定:

filename: '[name].bundle.js'.

'[name]' 将为每个入口点 动态替换 基础文件名,即:templatestemplates2main_scss、和 templates(用于您的样式)并将其与 'bundle.js' 连接起来,产生 多个唯一命名的包 ,即:

  1. templates.bundle.js
  2. templates2.bundle.js
  3. main_scss.bundle.js

有关如何创建输出包的深入说明,请查看 Webpack's documentation 以了解输出包。

话虽这么说,你从我上面提到的解释中得到了一个 main_scss.bundle.js,你从你的 MiniCssExtractPlugin 插件中得到了一个 main_scss.css 样式文件。 MiniCssExtractPlugin 正在提取您的 SASS 文件并将它们转换为等效的 CSS 文件。您正在使用以下代码行指定此 SASSCSS 提取:

plugins:[
        new MiniCssExtractPlugin({
            filename: "[name].css",
        })
    ]

请注意,此处再次使用 [name],因此每个生成的 CSS 文件也将根据每个 SASS 文件的基础文件名进行唯一命名。如果您只希望捆绑包包含您的 JavaScript 文件并生成单个 CSS 文件,我会尝试以下操作:

  1. 创建一个 未根据每个入口点的文件名唯一命名的单个包, 类似于以下内容:

    output: { path: path.resolve(__dirname, 'public/assets'), filename: 'bundle.js' },

  2. 删除多个 CSS 入口点,而是创建一个 main.scss 文件。此文件的唯一目的是导入项目的所有其他 SASS 文件。

  3. 添加在步骤 2 中创建的这个文件作为入口点。

这将生成一个 JavaScript 包:bundle.js 和一个 CSS 文件:main.css,它将包含您应用程序的所有 JavaScript 和造型分别。您可以简单地 link 您生成的 JavaScript 包和 index.html 页面中相应的 CSS 文件。

希望对您有所帮助!