1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 | 'use strict';
|
8 |
|
9 | var SingleEntryPlugin = require('webpack/lib/SingleEntryPlugin');
|
10 | var utils = require('loader-utils');
|
11 |
|
12 | module.exports = function() {
|
13 |
|
14 | };
|
15 |
|
16 | module.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 |
|
24 | function 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 |
|
37 | function 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 |
|
54 | function getSource(url) {
|
55 | return 'module.exports = __webpack_public_path__ + ' + JSON.stringify(url);
|
56 | }
|
57 |
|
58 | function getCompilation(loader) {
|
59 | return loader._compilation;
|
60 | }
|