webpack/lib/ChunkTemplate.js

86 lines
2.4 KiB
JavaScript
Raw Normal View History

2013-03-26 23:54:41 +08:00
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
"use strict";
2013-03-26 23:54:41 +08:00
const ConcatSource = require("webpack-sources").ConcatSource;
const Template = require("./Template");
2013-03-26 23:54:41 +08:00
module.exports = class ChunkTemplate extends Template {
constructor(outputOptions) {
super(outputOptions);
}
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);
const core = this.applyPluginsWaterfall("modules", moduleSources, chunk, moduleTemplate, dependencyTemplates);
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, ";");
}
2013-03-26 23:54:41 +08:00
2017-10-30 20:56:57 +08:00
renderWebAssembly(module, moduleTemplate, dependencyTemplates) {
return moduleTemplate.render(module, dependencyTemplates, {});
2017-10-30 20:56:57 +08:00
}
updateHash(hash) {
hash.update("ChunkTemplate");
hash.update("2");
this.applyPlugins("hash", hash);
}
updateHashForChunk(hash, chunk) {
this.updateHash(hash);
this.applyPlugins("hash-for-chunk", hash, chunk);
}
};