UNPKG

3.8 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = loader;
7exports.pitch = pitch;
8
9var _path = _interopRequireDefault(require("path"));
10
11var _loaderUtils = require("loader-utils");
12
13var _schemaUtils = require("schema-utils");
14
15var _NodeTargetPlugin = _interopRequireDefault(require("webpack/lib/node/NodeTargetPlugin"));
16
17var _SingleEntryPlugin = _interopRequireDefault(require("webpack/lib/SingleEntryPlugin"));
18
19var _WebWorkerTemplatePlugin = _interopRequireDefault(require("webpack/lib/webworker/WebWorkerTemplatePlugin"));
20
21var _ExternalsPlugin = _interopRequireDefault(require("webpack/lib/ExternalsPlugin"));
22
23var _options = _interopRequireDefault(require("./options.json"));
24
25var _supportWebpack = _interopRequireDefault(require("./supportWebpack5"));
26
27var _supportWebpack2 = _interopRequireDefault(require("./supportWebpack4"));
28
29var _utils = require("./utils");
30
31function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
32
33let FetchCompileWasmPlugin;
34let FetchCompileAsyncWasmPlugin; // determine the version of webpack peer dependency
35// eslint-disable-next-line global-require, import/no-unresolved
36
37const useWebpack5 = require("webpack/package.json").version.startsWith("5.");
38
39if (useWebpack5) {
40 // eslint-disable-next-line global-require, import/no-unresolved
41 FetchCompileWasmPlugin = require("webpack/lib/web/FetchCompileWasmPlugin"); // eslint-disable-next-line global-require, import/no-unresolved
42
43 FetchCompileAsyncWasmPlugin = require("webpack/lib/web/FetchCompileAsyncWasmPlugin");
44} else {
45 // eslint-disable-next-line global-require, import/no-unresolved
46 FetchCompileWasmPlugin = require("webpack/lib/web/FetchCompileWasmTemplatePlugin");
47}
48
49function loader() {}
50
51function pitch(request) {
52 this.cacheable(false);
53 const options = (0, _loaderUtils.getOptions)(this);
54 (0, _schemaUtils.validate)(_options.default, options, {
55 name: "Worker Loader",
56 baseDataPath: "options"
57 });
58 const workerContext = {};
59 const compilerOptions = this._compiler.options || {};
60 const filename = options.filename ? options.filename : (0, _utils.getDefaultFilename)(compilerOptions.output.filename);
61 const chunkFilename = options.chunkFilename ? options.chunkFilename : (0, _utils.getDefaultChunkFilename)(compilerOptions.output.chunkFilename);
62 const publicPath = options.publicPath ? options.publicPath : compilerOptions.output.publicPath;
63 workerContext.options = {
64 filename,
65 chunkFilename,
66 publicPath,
67 globalObject: "self"
68 };
69 workerContext.compiler = this._compilation.createChildCompiler(`worker-loader ${request}`, workerContext.options);
70 new _WebWorkerTemplatePlugin.default().apply(workerContext.compiler);
71
72 if (this.target !== "webworker" && this.target !== "web") {
73 new _NodeTargetPlugin.default().apply(workerContext.compiler);
74 }
75
76 if (FetchCompileWasmPlugin) {
77 new FetchCompileWasmPlugin({
78 mangleImports: compilerOptions.optimization.mangleWasmImports
79 }).apply(workerContext.compiler);
80 }
81
82 if (FetchCompileAsyncWasmPlugin) {
83 new FetchCompileAsyncWasmPlugin().apply(workerContext.compiler);
84 }
85
86 if (compilerOptions.externals) {
87 new _ExternalsPlugin.default((0, _utils.getExternalsType)(compilerOptions), compilerOptions.externals).apply(workerContext.compiler);
88 }
89
90 new _SingleEntryPlugin.default(this.context, `!!${request}`, _path.default.parse(this.resourcePath).name).apply(workerContext.compiler);
91 workerContext.request = request;
92 const cb = this.async();
93
94 if (workerContext.compiler.cache && typeof workerContext.compiler.cache.get === "function") {
95 (0, _supportWebpack.default)(this, workerContext, options, cb);
96 } else {
97 (0, _supportWebpack2.default)(this, workerContext, options, cb);
98 }
99}
\No newline at end of file