UNPKG

1.5 kBJavaScriptView Raw
1/**
2 * @author Eoin Hennessy
3 * @author Erik Desjardins
4 * See LICENSE file in root directory for full license.
5 */
6
7'use strict';
8
9var SingleEntryPlugin = require('webpack/lib/SingleEntryPlugin');
10var utils = require('loader-utils');
11
12module.exports = function() {
13 // ...
14};
15
16module.exports.pitch = function(request) {
17 var query = utils.parseQuery(this.query);
18 var compiler = createCompiler(this, request, {
19 filename: query.name
20 });
21 runCompiler(compiler, this.async());
22};
23
24function runCompiler(compiler, callback) {
25 compiler.runAsChild(function(error, entries) {
26 if (error) {
27 callback(error);
28 } else if (entries[0]){
29 var url = entries[0].files[0];
30 callback(null, getSource(url));
31 } else {
32 callback(null, null);
33 }
34 });
35}
36
37function createCompiler(loader, request, options) {
38 var compiler = getCompilation(loader).createChildCompiler('entry', options);
39 var plugin = new SingleEntryPlugin(loader.context, '!!' + request, utils.interpolateName(loader, '[name]', {}));
40 compiler.apply(plugin);
41 var subCache = 'subcache ' + __dirname + ' ' + request;
42 compiler.plugin('compilation', function(compilation) {
43 if (!compilation.cache) {
44 return;
45 }
46 if (!compilation.cache[subCache]) {
47 compilation.cache[subCache] = {};
48 }
49 compilation.cache = compilation.cache[subCache];
50 });
51 return compiler;
52}
53
54function getSource(url) {
55 return 'module.exports = __webpack_public_path__ + ' + JSON.stringify(url);
56}
57
58function getCompilation(loader) {
59 return loader._compilation;
60}