async-module-loader
Version:
Async modules (chunks) loader for webpack with built-in error callbacks
93 lines (64 loc) • 2.36 kB
Markdown
_Based on https://github.com/webpack/bundle-loader with improvements of error handling_
``npm install async-module-loader``
[](http://webpack.github.io/docs/using-loaders.html)
Also you will need to [use a `AsyncModulePlugin`](
`async-module-loader` returns function which accepts 2 callbacks: for success and for fail
Exports of the requested module are passed into success callback as a first argument
```js
require('async-module-loader!./file.js')(function onLoad(mod) {
mod.doSomething();
}, function onError() {
// error happened
});
```
Also you can use Promises with `promise` option specified, like this:
```js
require('async-module-loader?promise!./file.js').then(function onLoad(mod) {
mod.doSomething();
}, function onError() {
// error happened
});
```
```js
require('async-module-loader?name=my-chunk!./file.js')(function onLoad(mod) {
mod.doSomething();
}, function onError() {
// error happened
});
```
If you do not want your module to be executed immediately (maybe because some animation is in play), then you can tell to `async-module-loader` to load a chunk, but not execute it. In such, a function will be passed to the success callback instead of a `module.exports` object of requested chunk. Call that function then you will need you chunk executed:
```js
require('async-module-loader?noexec!./file.js')(function onLoad(executeChunk) {
setTimeout(function() {
var mod = executeChunk();
mod.doSomething();
}, 500);
}, function onError() {
// error happened
});
```
To make `async-module-loader` work correctly you need to add `AsyncModulePlugin` to your plugins.
```js
// webpack.config.js
var AsyncModulePlugin = require('async-module-loader/plugin');
module.exports = {
// ...
plugins: [
// ... other plugins
new AsyncModulePlugin()
]
// ...
}
```
* `name`: Use this to specify output name for requested chunk. See [webpack documentation](https://github.com/webpack/loader-utils#interpolatename)
* `promise`: Use this to return a promise from `async-module-loader`.
* `noexec`: Use this to delay chunk execution
MIT (http://www.opensource.org/licenses/mit-license)