Skip to content

Commit 80a3a7b

Browse files
committed
added experimental AutomaticPrefetchPlugin
1 parent 769d40e commit 80a3a7b

2 files changed

Lines changed: 37 additions & 0 deletions

File tree

lib/AutomaticPrefetchPlugin.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
MIT License http://www.opensource.org/licenses/mit-license.php
3+
Author Tobias Koppers @sokra
4+
*/
5+
var async = require("async");
6+
var PrefetchDependency = require("./dependencies/PrefetchDependency");
7+
var NormalModule = require("./NormalModule");
8+
9+
function AutomaticPrefetchPlugin() {
10+
}
11+
module.exports = AutomaticPrefetchPlugin;
12+
AutomaticPrefetchPlugin.prototype.apply = function(compiler) {
13+
compiler.plugin("compilation", function(compilation, params) {
14+
var normalModuleFactory = params.normalModuleFactory;
15+
16+
compilation.dependencyFactories.set(PrefetchDependency, normalModuleFactory);
17+
});
18+
var lastModules = null;
19+
compiler.plugin("after-compile", function(compilation, callback) {
20+
lastModules = compilation.modules.filter(function(m) {
21+
return m instanceof NormalModule;
22+
}).map(function(m) {
23+
return {
24+
context: m.context,
25+
request: m.request
26+
};
27+
});
28+
callback();
29+
});
30+
compiler.plugin("make", function(compilation, callback) {
31+
if(!lastModules) return callback();
32+
async.forEach(lastModules, function(m, callback) {
33+
compilation.prefetch(m.context || compiler.context, new PrefetchDependency(m.request), callback);
34+
}, callback);
35+
}.bind(this));
36+
};

lib/webpack.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ exportPlugins(exports, ".", [
6464
"IgnorePlugin",
6565
"BannerPlugin",
6666
"PrefetchPlugin",
67+
"AutomaticPrefetchPlugin",
6768
"ProvidePlugin",
6869
"HotModuleReplacementPlugin",
6970
"ResolverPlugin",

0 commit comments

Comments
 (0)