Задать вопрос
@KnightForce

Webpack. Как исправить ошибку Uncaught ReferenceError: webpackJsonp_name_ is not defined?

При открытии страницы index.html в браузере в консоле выводится:
Uncaught ReferenceError: webpackJsonp_name_ is not defined at babelPolyfill.js:2

babelPolyfill.js - полифилл от babel.

webpack.config.js:
var path = require('path');
var webpack = require('webpack');
var ExtractTextPlugin = require("extract-text-webpack-plugin");

module.exports = {
    //devtool: 'cheap-module-eval-source-map',
    context: path.join(__dirname, 'frontend'),
    entry: {
        babelPolyfill: "babel-polyfill",
        index: "./index",
        common: "./common",
    },
    output: {
        path: path.join(__dirname, 'public'),
        filename: '[name].js',
        publicPath: '/public/',
        library: '[name]'
    },
    resolve: {
        modules: [path.resolve(__dirname, "node_modules")]
    },
    resolveLoader: {
         modules: ["web_loaders", "web_modules", "node_loaders", "node_modules"],
    },

    module: {
      rules: [
        {
            exclude: /\/node_modules/,
            loader: "babel-loader",
            options: {
                presets: [['es2015', {modules: false}], "es2016", "es2017", "react"],
                plugins: ['transform-runtime'], 
            },
        },
        {
            test: /\.css$/,
            use: ExtractTextPlugin.extract(
                {
                    fallback: "style-loader",
                    use: ["css-loader","autoprefixer-loader?browsers=last 2 versions"]
                }),
            
        },
        {
            test: /\.less$/,
            use: ExtractTextPlugin.extract(
                {
                    fallback: "style-loader",
                    use: ["css-loader","autoprefixer-loader?browsers=last 2 versions","less-loader"],
                }),

        },
        {
            test: /\.(png|jpg|svg|ttf|eot|woff|woff2)$/,
            use: "file?name=[name][hash].[ext]",
        }
      ]
    },
    plugins: [

        new webpack.NoEmitOnErrorsPlugin(),
        new webpack.optimize.CommonsChunkPlugin({
            name: "commons",
            filename: "commons.js",
            minChunks: 2,

        }),

    ],
    watch: true,
}


index.html:
<html>
  <head>
    <title>Title</title>
  </head>
  <body>
  	<script src="./public/babelPolyfill.js"></script>
	<script src="./public/commons.js"></script>
    <script src="./public/index.js"></script>
  </body>
</html>
  • Вопрос задан
  • 3607 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@amokrushin
Проблема в том, что к каждому модулю entry webpack добавляет свой загрузчик (webpack runtime). Плагин CommonsChunkPlugin унес этот загрузчик в файл commons.js, который загружается в браузере вторым по очереди. А на момент исполнения кода файла babelPolyfill.js код загрузчика отсутствует и возникает ошибка.
Как исправить?
Есть такие варианты:
1. удалить плагин CommonsChunkPlugin
2. удалить babelPolyfill.js из конфига webpack и подключать уже готовую версию перед остальными тегами script
3. подключать рекомендованным способом в том скрипте который загружается первым
4. можно вынести webpack runtime в отдельный файл добавив еще раз плагин CommonsChunkPlugin после того что уже есть
new webpack.optimize.CommonsChunkPlugin({
    name: 'webpack.runtime',
    minChunks: Infinity,
})

и загружать его первым
<script src="./public/webpack.runtime.js"></script>
но это точно костыль
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы