2013-03-26 23:54:41 +08:00
|
|
|
/*
|
|
|
|
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
|
|
Author Tobias Koppers @sokra
|
|
|
|
*/
|
2017-01-13 04:38:38 +08:00
|
|
|
"use strict";
|
2013-03-26 23:54:41 +08:00
|
|
|
|
2017-01-13 04:38:38 +08:00
|
|
|
const ConcatSource = require("webpack-sources").ConcatSource;
|
|
|
|
const Template = require("./Template");
|
2013-03-26 23:54:41 +08:00
|
|
|
|
2017-01-13 04:38:38 +08:00
|
|
|
module.exports = class ChunkTemplate extends Template {
|
|
|
|
constructor(outputOptions) {
|
|
|
|
super(outputOptions);
|
|
|
|
}
|
2016-05-20 13:39:36 +08:00
|
|
|
|
2017-10-30 20:56:57 +08:00
|
|
|
getRenderManifest(options) {
|
|
|
|
const chunk = options.chunk;
|
|
|
|
const outputOptions = options.outputOptions;
|
|
|
|
const moduleTemplates = options.moduleTemplates;
|
|
|
|
const dependencyTemplates = options.dependencyTemplates;
|
|
|
|
|
|
|
|
const result = [];
|
|
|
|
|
|
|
|
let filenameTemplate;
|
|
|
|
if(chunk.isInitial()) {
|
|
|
|
if(chunk.filenameTemplate)
|
|
|
|
filenameTemplate = chunk.filenameTemplate;
|
|
|
|
else
|
|
|
|
filenameTemplate = outputOptions.filename;
|
|
|
|
} else {
|
|
|
|
filenameTemplate = outputOptions.chunkFilename;
|
|
|
|
}
|
|
|
|
|
|
|
|
result.push({
|
|
|
|
render: () => this.renderJavascript(chunk, moduleTemplates.javascript, dependencyTemplates),
|
|
|
|
filenameTemplate,
|
|
|
|
pathOptions: {
|
|
|
|
chunk
|
|
|
|
},
|
|
|
|
identifier: `chunk${chunk.id}`,
|
|
|
|
hash: chunk.hash
|
|
|
|
});
|
|
|
|
|
2017-11-11 18:27:02 +08:00
|
|
|
for(const module of chunk.getModules().filter(m => m.type && m.type.startsWith("webassembly"))) {
|
2017-10-30 20:56:57 +08:00
|
|
|
const filenameTemplate = outputOptions.webassemblyModuleFilename;
|
|
|
|
|
|
|
|
result.push({
|
|
|
|
render: () => this.renderWebAssembly(module, moduleTemplates.webassembly, dependencyTemplates),
|
|
|
|
filenameTemplate,
|
|
|
|
pathOptions: {
|
|
|
|
module
|
|
|
|
},
|
|
|
|
identifier: `webassemblyModule${module.id}`,
|
|
|
|
hash: module.hash
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
renderJavascript(chunk, moduleTemplate, dependencyTemplates) {
|
|
|
|
const moduleSources = this.renderChunkModules(chunk, m => true, moduleTemplate, dependencyTemplates);
|
2017-03-18 20:40:34 +08:00
|
|
|
const core = this.applyPluginsWaterfall("modules", moduleSources, chunk, moduleTemplate, dependencyTemplates);
|
2017-01-13 04:38:38 +08:00
|
|
|
let source = this.applyPluginsWaterfall("render", core, chunk, moduleTemplate, dependencyTemplates);
|
|
|
|
if(chunk.hasEntryModule()) {
|
|
|
|
source = this.applyPluginsWaterfall("render-with-entry", source, chunk);
|
|
|
|
}
|
|
|
|
chunk.rendered = true;
|
|
|
|
return new ConcatSource(source, ";");
|
2014-12-22 23:10:23 +08:00
|
|
|
}
|
2013-03-26 23:54:41 +08:00
|
|
|
|
2017-10-30 20:56:57 +08:00
|
|
|
renderWebAssembly(module, moduleTemplate, dependencyTemplates) {
|
2017-11-10 18:01:51 +08:00
|
|
|
return moduleTemplate.render(module, dependencyTemplates, {});
|
2017-10-30 20:56:57 +08:00
|
|
|
}
|
|
|
|
|
2017-01-13 04:38:38 +08:00
|
|
|
updateHash(hash) {
|
|
|
|
hash.update("ChunkTemplate");
|
|
|
|
hash.update("2");
|
|
|
|
this.applyPlugins("hash", hash);
|
|
|
|
}
|
2015-06-25 05:17:12 +08:00
|
|
|
|
2017-01-13 04:38:38 +08:00
|
|
|
updateHashForChunk(hash, chunk) {
|
|
|
|
this.updateHash(hash);
|
|
|
|
this.applyPlugins("hash-for-chunk", hash, chunk);
|
|
|
|
}
|
2015-06-25 05:17:12 +08:00
|
|
|
};
|