Webpack: ошибка при выпуске

У меня есть импорт примерно так:

import { foo } from 'bar';

Есть ли способ заставить Webpack выкинуть ошибку, если foo не определен?

Обратите внимание, что я использую Babel, если это имеет значение.

Ответы

Ответ 1

Как Тобиас К. указал в комментариях, другой ответ неверен. Конфигурирование strictModuleExceptionHandling: true не приведет к ошибке времени компиляции, если вы попытаетесь импортировать модуль, который не существует.

Правильная конфигурация strictExportPresence: true, доступная только в webpack v2.3.0 и более поздних версиях. (Более ранние версии могут показывать только предупреждение, а не ошибку.)

Ответ 2

Можно настроить webpack 2 на ошибку при попытке импорта с помощью output.strictModuleExceptionHandling. Функциональность была добавлена ​​этим запросом на растяжение https://github.com/webpack/webpack/pull/3302, но он еще не задокументирован. Здесь как его использовать:

module.exports = {
    entry: {
        main: "./main.js",
    },
    output: {
        filename: "[name].bundle.js",
        strictModuleExceptionHandling: true
    }
}

Теперь, если я пытаюсь импортировать из файла, который не существует, или я делаю импорт, который разрешает undefined, я получаю сообщения об ошибках и предупреждениях в консоли webpack:

WARNING in ./js/pedigree.js
32:35-49 "export 'default' (imported as 'DisorderLegend') was not found in './disorderLegend'

ERROR in ./js/pedigree.js
Module not found: Error: Can't resolve './OkCancelDialogue' in '/home/tim/workspace/projects/public/js/ext-lib/panogram/js'
 @ ./js/pedigree.js 5:0-54
 @ ./js/viewerPedigree.js
 @ ./main.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./main.js
webpack: Failed to compile.

В консоли хром вы получите предупреждение, подобное этому:

предупреждающее сообщение в хроме

Ответ 3

При использовании strictExportPresence ниже отображается ошибка Недопустимый объект конфигурации. Webpack был инициализирован с использованием объекта конфигурации, который не соответствует схеме API. - configuration.output имеет неизвестное свойство 'strictExportPresence'.