Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Async webpack config

I can't get this to work. Please help :)

(The documentation says webpack can handle Promises)

This works:

var compiler = webpack(webpackConfig)

But with a promise I get errors

var compiler = webpack(new Promise(function(resolve, reject) {
  setTimeout(() => { resolve(webpackConfig) }, 100);
}));

The error I get is:

C:\path\node_modules\webpack\lib\webpack.js:19
                throw new 
WebpackOptionsValidationError(webpackOptionsValidationErrors);
                ^

WebpackOptionsValidationError: Invalid configuration object. Webpack has been initialised using a configuration object that does not match the API schema.
 - configuration misses the property 'entry'.
   object { <key>: non-empty string | [non-empty string] } | non-empty string | [non-empty string] | function
   The entry point(s) of the compilation.
    at webpack (C:\path\node_modules\webpack\lib\webpack.js:19:9)
    at Object.<anonymous> (C:\path\build\dev-server.js:27:16)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:458:32)
    at tryModuleLoad (module.js:417:12)
    at Function.Module._load (module.js:409:3)
    at Module.runMain (module.js:575:10)
    at run (bootstrap_node.js:352:7)
    at startup (bootstrap_node.js:144:9)
    at bootstrap_node.js:467:3
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

What am I doing wrong?

like image 466
Tobbe Avatar asked Feb 24 '26 20:02

Tobbe


1 Answers

It's the webpack CLI that handles the Promise configuration. If you're using the Node API you need to handle it yourself.

In your example this would be:

const configPromise = new Promise(function(resolve, reject) {
  setTimeout(() => { resolve(webpackConfig) }, 1000);
});

configPromise
  .then(webpack) // Passes the config to webpack
  .then(compiler => {
    // Do the work with the compiler
  });

The idea of this is to be able to do the asynchronous processing in the config without a hassle, that problem doesn't exist when using the Node API in the first place.

like image 112
Michael Jungo Avatar answered Feb 27 '26 09:02

Michael Jungo