Webpack ExtractTextPlugin выдает ошибку при загрузке Sass

Пытаюсь добавить sass-loader в конфигурацию моего веб-пакета и получаю ошибку:

70% 1/1 build modules/Users/a557789/Documents/f/Portal/node_modules/webpack/node_modules/webpack-core/lib/LoadersList.js:81
        r.forEach(function(r) {
          ^
TypeError: undefined is not a function
    at /Users/a557789/Documents/f/Portal/node_modules/webpack/node_modules/webpack-core/lib/LoadersList.js:81:5
    at Array.reduce (native)
    at LoadersList.match (/Users/a557789/Documents/f/Portal/node_modules/webpack/node_modules/webpack-core/lib/LoadersList.js:80:27)

веб-пакет.config:

var webpack = require("webpack");
var baseDir = "dist";

var HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require("extract-text-webpack-plugin");

var path = require("path");

module.exports = {
    context: __dirname + "/app",
    entry: {
        app: "./main"
    },
    resolve: {
        extensions: ['', '.js', '.ts', '.css', '.scss']
    },
    output: {
        path: __dirname + "/dist",
        sourceMapFilename: "[name].map",
        filename: "[name].js"
    },
    module: {
        loaders: [
            //https://www.npmjs.com/package/webpack-typescript
            {
                test: /\.ts$/,
                loader: "ts-loader"
            },
            {
                test: /\.scss$/,
                loaders: ExtractTextPlugin.extract("style", "css!sass")
                //loaders: ExtractTextPlugin.extract("style!css!sass")
            }
        ],
        noParse: [ /angular2\/bundles\/.+/ ]
    },
    plugins: [
        new webpack.optimize.OccurenceOrderPlugin(true),
        new ExtractTextPlugin("style.css"),
        new HtmlWebpackPlugin({
            template: "../index.html",
            inject: "body"
        })
    ],
    devtool: "source-map"
};

Я перепробовал множество различных вариантов параметров для вызова extract(), но безуспешно. Любая помощь будет принята с благодарностью.


person Bob    schedule 28.03.2016    source источник


Ответы (2)


Вместо использования

loaders: ExtractTextPlugin.extract("style", "css!sass")

вы должны использовать

loader: ExtractTextPlugin.extract("style", "css!sass")

вместо.

В этом случае ошибка не особенно описательная.

person Juho Vepsäläinen    schedule 28.03.2016
comment
спасибо @bebraw, это помогло .. и теперь это имеет смысл, когда вы указали на мою ошибку. - person Bob; 28.03.2016

В моем случае решением было вместо ExtractTextPlugin использовать MiniCssExtractPlugin. Подробнее в этом видео https://www.youtube.com/watch?v=JlBDfj75T3Y&list=PLblA84xge2_zwxh3XJqy6UVxS60YdusY8&index=10 Итак, мой конфиг выглядит так

const { CleanWebpackPlugin } = require("clean-webpack-plugin");    
const HtmlWebpackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const path = require("path");
module.exports = {
    entry: "./src/index.js",
    output: {
        filename: "[name].[contenthash].bundle.js",
        path: path.resolve(__dirname, "dist"),
    },
    module: {
        rules: [
            //babel
            {
                test: /\.m?js$/,
                exclude: /(node_modules|bower_components)/,
                use: {
                    loader: "babel-loader",
                    options: {
                        presets: ["@babel/preset-env"],
                    },
                },
            },
            //css
            {
                test: /\.less$/,
                use: [MiniCssExtractPlugin.loader, "css-loader", "less-loader"],
            },
        ],
    },
    plugins: [
        new HtmlWebpackPlugin({
            template: "index.html",
            title: "My app",
        }),
        new MiniCssExtractPlugin(),
        new CleanWebpackPlugin(),
    ],
};
person Oleg    schedule 23.08.2020