yanchengPowerSupply/node_modules/worker-loader/dist/index.js

132 lines
3.5 KiB
JavaScript

'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = loader;
exports.pitch = pitch;
var _options = require('./options.json');
var _options2 = _interopRequireDefault(_options);
var _loaderUtils = require('loader-utils');
var _loaderUtils2 = _interopRequireDefault(_loaderUtils);
var _schemaUtils = require('schema-utils');
var _schemaUtils2 = _interopRequireDefault(_schemaUtils);
var _NodeTargetPlugin = require('webpack/lib/node/NodeTargetPlugin');
var _NodeTargetPlugin2 = _interopRequireDefault(_NodeTargetPlugin);
var _SingleEntryPlugin = require('webpack/lib/SingleEntryPlugin');
var _SingleEntryPlugin2 = _interopRequireDefault(_SingleEntryPlugin);
var _WebWorkerTemplatePlugin = require('webpack/lib/webworker/WebWorkerTemplatePlugin');
var _WebWorkerTemplatePlugin2 = _interopRequireDefault(_WebWorkerTemplatePlugin);
var _workers = require('./workers/');
var _workers2 = _interopRequireDefault(_workers);
var _Error = require('./Error');
var _Error2 = _interopRequireDefault(_Error);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/* eslint-disable
import/first,
import/order,
comma-dangle,
linebreak-style,
no-param-reassign,
no-underscore-dangle,
prefer-destructuring
*/
function loader() {}
function pitch(request) {
const options = _loaderUtils2.default.getOptions(this) || {};
(0, _schemaUtils2.default)(_options2.default, options, 'Worker Loader');
if (!this.webpack) {
throw new _Error2.default({
name: 'Worker Loader',
message: 'This loader is only usable with webpack'
});
}
this.cacheable(false);
const cb = this.async();
const filename = _loaderUtils2.default.interpolateName(this, options.name || '[hash].worker.js', {
context: options.context || this.rootContext || this.options.context,
regExp: options.regExp
});
const worker = {};
worker.options = {
filename,
chunkFilename: `[id].${filename}`,
namedChunkFilename: null
};
worker.compiler = this._compilation.createChildCompiler('worker', worker.options);
// Tapable.apply is deprecated in tapable@1.0.0-x.
// The plugins should now call apply themselves.
new _WebWorkerTemplatePlugin2.default(worker.options).apply(worker.compiler);
if (this.target !== 'webworker' && this.target !== 'web') {
new _NodeTargetPlugin2.default().apply(worker.compiler);
}
new _SingleEntryPlugin2.default(this.context, `!!${request}`, 'main').apply(worker.compiler);
const subCache = `subcache ${__dirname} ${request}`;
worker.compilation = compilation => {
if (compilation.cache) {
if (!compilation.cache[subCache]) {
compilation.cache[subCache] = {};
}
compilation.cache = compilation.cache[subCache];
}
};
if (worker.compiler.hooks) {
const plugin = { name: 'WorkerLoader' };
worker.compiler.hooks.compilation.tap(plugin, worker.compilation);
} else {
worker.compiler.plugin('compilation', worker.compilation);
}
worker.compiler.runAsChild((err, entries, compilation) => {
if (err) return cb(err);
if (entries[0]) {
worker.file = entries[0].files[0];
worker.factory = (0, _workers2.default)(worker.file, compilation.assets[worker.file].source(), options);
if (options.fallback === false) {
delete this._compilation.assets[worker.file];
}
return cb(null, `module.exports = function() {\n return ${worker.factory};\n};`);
}
return cb(null, null);
});
}