I have an import something like this:
import { foo } from 'bar'; Is there a way to get Webpack to throw an error if foo is not defined?
Note that I'm using Babel if that makes a difference.
2 Answers
Answers 1
It is possible to configure webpack 2 to throw an error when an import fails by using output.strictModuleExceptionHandling. The functionality was added by this pull request https://github.com/webpack/webpack/pull/3302 but it has not been documented yet. Here's how to use it: 
module.exports = {     entry: {         main: "./main.js",     },     output: {         filename: "[name].bundle.js",         strictModuleExceptionHandling: true     } } Now if I try to import from a file which dosn't exist, or I make an import which resolves to undefined I would get error and warning messages in the webpack console:
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. In the chrome console you'll get a warning like this:
Answers 2
Firstly enable WARNING of missing modules by enabling modules
module: {   rules: [     {       test: /\.js$/,       exclude: /node_modules/,       loader: 'babel-loader',       options: {          presets: [            [ 'es2015', { modules: false } ] // important modules: false          ]       }     }   ] } Now in your console you should see something like this: 
Next convert this warning to error and exit webpack build with error.
plugins: [   function () {     const isModuleDependencyWarning = warn => warn.name === 'ModuleDependencyWarning';     const printError = warn => console.error('\x1b[31m', warn.message, '\x1b[0m');     this.plugin('done', function(stats) {       const missingModules = stats.compilation.warnings.filter(isModuleDependencyWarning);       if (missingModules.length) {         missingModules.forEach(printError);         process.exit(1);       }     });   } ] This should break webpack build with error on ModuleDependencyWarning: 

 
0 comments:
Post a Comment