12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
- "use strict";
-
- const path = require("path");
- const asyncLib = require("async");
-
- class LibManifestPlugin {
- constructor(options) {
- this.options = options;
- }
-
- apply(compiler) {
- compiler.plugin("emit", (compilation, callback) => {
- asyncLib.forEach(compilation.chunks, (chunk, callback) => {
- if(!chunk.isInitial()) {
- callback();
- return;
- }
- const targetPath = compilation.getPath(this.options.path, {
- hash: compilation.hash,
- chunk
- });
- const name = this.options.name && compilation.getPath(this.options.name, {
- hash: compilation.hash,
- chunk
- });
- const manifest = {
- name,
- type: this.options.type,
- content: chunk.mapModules(module => {
- if(module.libIdent) {
- const ident = module.libIdent({
- context: this.options.context || compiler.options.context
- });
- if(ident) {
- return {
- ident,
- data: {
- id: module.id,
- meta: module.meta,
- exports: Array.isArray(module.providedExports) ? module.providedExports : undefined
- }
- };
- }
- }
- }).filter(Boolean).reduce((obj, item) => {
- obj[item.ident] = item.data;
- return obj;
- }, Object.create(null))
- };
- const content = new Buffer(JSON.stringify(manifest), "utf8"); //eslint-disable-line
- compiler.outputFileSystem.mkdirp(path.dirname(targetPath), err => {
- if(err) return callback(err);
- compiler.outputFileSystem.writeFile(targetPath, content, callback);
- });
- }, callback);
- });
- }
- }
- module.exports = LibManifestPlugin;
|