【问题标题】:Webpack Extract-Text-Plugin Output Multiple CSS Files (Both Minified and Not Minified)Webpack Extract-Text-Plugin 输出多个 CSS 文件(缩小和未缩小)
【发布时间】:2018-01-24 03:25:54
【问题描述】:

我在 SCSS 中编写样式,我想使用 webpack 来构建缩小和非缩小的 css 文件。 所以我设置了我的 webpack.config.js:

const path = require('path');
const webpack = require('webpack');
const ExtractTextPlugin = require('extract-text-webpack-plugin');

const extractSASS = new ExtractTextPlugin('assets/styles/[name].css');
const extractMiniSASS = new ExtractTextPlugin('assets/styles/[name].min.css');

module.exports = {
    entry: './Scripts/main.js',
    output: { path: path.resolve(__dirname, 'wwwroot/'), filename: 'scripts/bundle.js' },
    module: {
        rules: [
            {
                test: /\.scss$/,
                use: extractSASS.extract({
                    use: ['css-loader', 'sass-loader'],
                }),
            },
            {
                test: /\.scss$/,
                use: extractMiniSASS.extract({
                    use: [{ loader: 'css-loader', options: { minimize: true } }, 'sass-loader'],
                }),
            },
            {
                test: /\.js$/,
                use: [{ loader: 'babel-loader', options: { presets: ['es2015'] } }],
            },
        ],
    },
    plugins: [new webpack.optimize.UglifyJsPlugin(), extractSASS, extractMiniSASS],
};

但是在我运行npm run build 之后,我得到了一些错误:

ERROR in ./SCSS/main.scss
Module build failed:
$primary_color: #99dd00;
^
      Invalid CSS after "e": expected 1 selector or at-rule, was "exports = module.ex"
      in D:\Test\WebpackTest\CSSLoaderTest\SCSS\main.scss (line 1, column 1)
 @ ./Scripts/main.js 3:0-28
Child extract-text-webpack-plugin node_modules/extract-text-webpack-plugin/dist node_modules/css-loader/index.js!node_modules/sass-loader/lib/loader.js!node_modules/extract-text-webpack-plugin/dist/loader.js??ref--1-0!node_modules/css-loader/index.js??ref--1-1!node_modules/sass-loader/lib/loader.js!SCSS/main.scss:
       [0] ./node_modules/css-loader!./node_modules/sass-loader/lib/loader.js!./node_modules/extract-text-webpack-plugin/dist/loader.js?{"id":2,"omit":0,"remove":true}!./node_modules/css-loader?{"minimize":true}!./node_modules/sass-loader/lib/loader.js!./SCSS/main.scss 159 bytes {0} [built]
        + 1 hidden module
npm ERR! code ELIFECYCLE
npm ERR! errno 2
npm ERR! cssloadertest@1.0.0 build: `webpack`
npm ERR! Exit status 2
npm ERR!
npm ERR! Failed at the cssloadertest@1.0.0 build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\nodejs\node_cache\_logs\2018-01-24T03_09_52_242Z-debug.log

如果我的 webpack.config.js 出错了?我该如何解决?

【问题讨论】:

    标签: javascript webpack extracttextwebpackplugin


    【解决方案1】:

    目前您使用的配置无法做到这一点。

    https://github.com/webpack/webpack/issues/5433

    解决您的问题的可行方法是通过返回数组而不是对象来使用多个配置,然后您可以在每个文字中传递具有不同配置的相同加载器

     module.exports = [{
        entry: './Scripts/main.js',
        output: { path: path.resolve(__dirname, 'wwwroot/'), filename: 'scripts/bundle.js' },
        module: {
            rules: [
                {
                    test: /\.scss$/,
                    use: extractMiniSASS.extract({
                        use: [{ loader: 'css-loader', options: { minimize: true } }, 'sass-loader'],
                    }),
                },
                {
                    test: /\.js$/,
                    use: [{ loader: 'babel-loader', options: { presets: ['es2015'] } }],
                },
            ],
        },
        plugins: [new webpack.optimize.UglifyJsPlugin(), extractMiniSASS],
    },
    {
    entry: './Scripts/main.js',
    output: { path: path.resolve(__dirname, 'wwwroot/'), filename: 'scripts/bundle.js' },
    module: {
        rules: [
            {
                test: /\.scss$/,
                use: extractSASS.extract({
                    use: ['css-loader', 'sass-loader'],
                }),
            },
        ],
    },
    plugins: [extractSASS],
    },
    
    ]
    

    当然,您应该删除所有存在的重复项... 由于这会很快变得混乱,因此有一个名为 webpack-merge 的工具可以将您的配置拆分为单独的文件,删除重复的加载器等。

    https://github.com/survivejs/webpack-merge

    【讨论】:

    • 我可以输出缩小和非缩小的 css 文件。谢谢。
    【解决方案2】:

    我修改了webpack.config.js。试试这个。

    const path = require('path');
    const webpack = require('webpack');
    const ExtractTextPlugin = require('extract-text-webpack-plugin');
    
    const extractSass = new ExtractTextPlugin({
      filename: "assets/styles/[name].css"
    });
    
    const extractMiniSASS = new ExtractTextPlugin({
      filename: "assets/styles/[name].min.css"
    });
    
    module.exports = {
      entry: './Scripts/main.js',
      output: {
        path: path.resolve(__dirname, 'wwwroot/'),
        filename: 'scripts/bundle.js'
      },
      module: {
        rules: [
          {
            test: /\.js$/,
            use: [
              {
                loader: 'babel-loader',
                options: {
                  presets: ['es2015']
                }
              }
            ]
          }, {
            test: /\.scss$/,
            use: extractSass.extract({
              use: [
                {
                  loader: "css-loader"
                }, {
                  loader: "sass-loader"
                }
              ],
              fallback: "style-loader"
            })
          }
        ]
      }
      plugins: [
        new webpack.optimize.UglifyJsPlugin(),
        extractSASS,
        extractMiniSASS
      ]
    };
    

    【讨论】:

    • 我已经安装了style-loader,把规则改成:{ test: /\.scss$/, use: extractSASS.extract({ use: ['style-loader', 'css- loader', 'sass-loader'] })}, { test: /\.scss$/, use: extractMiniSASS.extract({ use: ['style-loader', 'css-loader?importLoaders=1', ' sass-loader']})},还是一样的错误。
    • 使用上面的配置一次试试。不要在规则中包含 extractSASS。
    • 它可以找到,但它没有构建任何 css 文件。
    • 我已经修改了答案,试一次告诉我
    • 我尝试用你的代码更改我的 webpack.config.js,它工作正常,但它只构建一个 css 文件。
    猜你喜欢
    • 2016-03-11
    • 2023-03-22
    • 2016-09-22
    • 1970-01-01
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    相关资源
    最近更新 更多