Ошибка при попытке перейти с webpack3 на webpack4

Я получаю следующую ошибку, когда обновляю свой проект с webpack 3.x до webpack 4.0.0

    ERROR in multi script-loader!jquery/dist/jquery.min.js script-loader!foundation-sites/dist/js/foundation.min.js eventsource-polyfill webpack-hot-middleware/client?reload=true ./src/index.jsx
Module not found: Error: Can't resolve 'babel-loader' in 'C:\projects\rebasing\uisrc'
 @ multi script-loader!jquery/dist/jquery.min.js script-loader!foundation-sites/dist/js/foundation.min.js eventsource-polyfill webpack-hot-middleware/client?reload=true ./src/index.jsx

Конфигурации правил показаны ниже в файле конфигурации.

rules: [
  {
    test: /\.(jsx?)$/,
    use: 'babel-loader',
    exclude: /node_modules/,
  },
]

Package.json имеет следующие библиотеки

"devDependencies": {
"babel-cli": "6.26.0",
"babel-core": "6.8.0",
"babel-eslint": "7.0.0",
"babel-loader": "7.1.5",
"babel-preset-es2015": "6.6.0",
"babel-preset-react": "6.5.0",
"babel-preset-react-hmre": "1.1.1",
"babel-preset-stage-0": "6.5.0",
"babel-preset-stage-2": "6.17.0",
"babel-register": "6.26.0",
}

Любая помощь будет оценена по достоинству.


person scary_devil    schedule 05.10.2018    source источник


Ответы (2)


В webpack4 конфигурация должна быть loader: "babel-loader", но не use: "babel-loader"

  rules: [
        {
            //tell webpack to use jsx-loader for all *.jsx files
            test: /\.(jsx?)$/,
            exclude: /node_modules/,
            loader: "babel-loader"
        },
   ]

Вот моя рабочая демонстрация webpack4

Версии, которые я использую

веб-пакет: ^ 4.15.0,

веб-пакет-кли: ^ 3.0.8,

webpack-dev-сервер: ^ 3.1.4,

вавилонское ядро: ^ 6.26.3,

вавилон-загрузчик: ^7.1.5,

свойства-класса-преобразования-плагина-бабеля: ^ 6.24.1,

babel-plugin-transform-object-rest-spread: ^ 6.26.0,

babel-polyfill: ^ 6.26.0, babel-preset-env: ^ 1.7.0,

предустановленная вавилонская реакция: ^ 6.24.1

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const CompressionPlugin = require("compression-webpack-plugin");
const webpack = require('webpack');

module.exports = {
    target: "web",
    entry: [
        "whatwg-fetch",
        'webpack-dev-server/client?http://localhost:8090',
        'webpack/hot/only-dev-server',
        'babel-polyfill',
        "./src/index.js"
        ],
    output: {
        path: path.resolve(__dirname, "build"),
        filename: "bundle.js",
        publicPath: "/"
        //make sure port 8090 is used when launching webpack-dev-server
    },
    plugins: [new HtmlWebpackPlugin({
        template: "index.html"
    }),
    new CompressionPlugin({
        asset: "[path].gz[query]",
        algorithm: "gzip",
        test: /\.js$|\.jsx$|\.css$|\.html$/,
        threshold: 10240,
        minRatio: 0.8
    }),
    new webpack.HotModuleReplacementPlugin(),
    // enable HMR globally

    new webpack.NoEmitOnErrorsPlugin(),
    new webpack.ProvidePlugin({   
        jQuery: 'jquery',
        $: 'jquery',
        jquery: 'jquery'
    })
    ],
    module: {
        rules: [
            {
                //tell webpack to use jsx-loader for all *.jsx files
                test: /\.(js|jsx)$/,
                exclude: /node_modules/,
                loader: "babel-loader"
            },
            {
                test: /\.css$/,
                loader: "style-loader!css-loader"
            },
            {
                test: /\.(png|jpg|jpeg|gif|woff|woff2|svg)$/,
                loader: 'url-loader?limit=100000'
            },
            {
                test: /\.(eot|ttf)$/,
                loader: "file-loader"  
            },
            {
                test: /\.html$/,
                exclude: /node_modules/,
                loader: 'html-loader'
            },
            {
                test: /\.scss$/,
                loaders: ["style-loader", "css-loader", "sass-loader"]
            }
        ]
    },
    resolve: {
        modules: [
            path.resolve("./src"),
            path.resolve("./node_modules")
        ],
        extensions: [".js", ".jsx"]
    },
    devServer: {
        watchOptions: {
        // Needed for Windows Subsystem for Linux dev environment:
            poll: true
        },
        contentBase: "/build"
    },
    devtool: "cheap-module-eval-source-map",
    node: {
        child_process : "empty",
        fs: "empty"
    }
};
person Hemadri Dasari    schedule 05.10.2018
comment
Я тоже пытался использовать загрузчик, но это не сработало - person scary_devil; 05.10.2018
comment
@scary_devil Я добавил к ответу свое рабочее решение. Пожалуйста, посмотрите - person Hemadri Dasari; 05.10.2018
comment
Спасибо за быстрый ответ... но мне потребовалось некоторое время, чтобы решить проблему из-за импорта css в наши проекты. - person scary_devil; 09.10.2018

Попробуйте очистить кеш node_modules и переустановить, если вы еще этого не сделали:

rm -rf node_modules/
rm -rf ~/.npm
npm cache verify
npm install
person Stevethemacguy    schedule 05.10.2018
comment
Я пробовал это много раз ... но проблема была связана с самим моим файлом конфигурации. - person scary_devil; 09.10.2018
comment
Рад, что вы исправили проблему! - person Stevethemacguy; 20.10.2018