WIP - add extractor, generate snippet_data
This commit is contained in:
92
node_modules/webpack-stats-plugin/lib/stats-writer-plugin.js
generated
vendored
Normal file
92
node_modules/webpack-stats-plugin/lib/stats-writer-plugin.js
generated
vendored
Normal file
@ -0,0 +1,92 @@
|
||||
/**
|
||||
* Stats writer module.
|
||||
*
|
||||
* Stats can be a string or array (we"ll have array from using source maps):
|
||||
*
|
||||
* ```js
|
||||
* "assetsByChunkName": {
|
||||
* "main": [
|
||||
* "cd6371d4131fbfbefaa7.bundle.js",
|
||||
* "../js-map/cd6371d4131fbfbefaa7.bundle.js.map"
|
||||
* ]
|
||||
* },
|
||||
* ```
|
||||
*
|
||||
* **Note**: The stats object is **big**. It includes the entire source included
|
||||
* in a bundle. Thus, we default `opts.fields` to `["assetsByChunkName"]` to
|
||||
* only include those. However, if you want the _whole thing_ (maybe doing an
|
||||
* `opts.transform` function), then you can set `fields: null` in options to
|
||||
* get **all** of the stats object.
|
||||
*
|
||||
* See:
|
||||
* - http://webpack.github.io/docs/long-term-caching.html#get-filenames-from-stats
|
||||
* - https://github.com/webpack/docs/wiki/node.js-api#stats
|
||||
*
|
||||
* **`filename`**: The `opts.filename` option can be a file name or path relative to
|
||||
* `output.path` in webpack configuration. It should not be absolute.
|
||||
*
|
||||
* **`transform`**: By default, the retrieved stats object is `JSON.stringify`'ed
|
||||
* but by supplying an alternate transform you can target _any_ output format.
|
||||
* See [`demo/webpack.config.js`](demo/webpack.config.js) for various examples
|
||||
* including Markdown output.
|
||||
*
|
||||
* - **Warning**: The output of `transform` should be a `String`, not an object.
|
||||
* On Node `v4.x` if you return a real object in `transform`, then webpack
|
||||
* will break with a `TypeError` (See #8). Just adding a simple
|
||||
* `JSON.stringify()` around your object is usually what you need to solve
|
||||
* any problems.
|
||||
*
|
||||
* @param {Object} opts options
|
||||
* @param {String} opts.filename output file name (Default: "stat.json")
|
||||
* @param {Array} opts.fields fields of stats obj to keep (Default: \["assetsByChunkName"\])
|
||||
* @param {Function} opts.transform transform stats obj (Default: `JSON.stringify()`)
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
function StatsWriterPlugin(opts) {
|
||||
opts = opts || {};
|
||||
this.opts = {};
|
||||
this.opts.filename = opts.filename || "stats.json";
|
||||
this.opts.fields = typeof opts.fields !== "undefined" ? opts.fields : ["assetsByChunkName"];
|
||||
this.opts.transform = opts.transform || function (data) { return JSON.stringify(data, null, 2); };
|
||||
}
|
||||
|
||||
StatsWriterPlugin.prototype = {
|
||||
constructor: StatsWriterPlugin,
|
||||
|
||||
apply: function (compiler) {
|
||||
var self = this;
|
||||
compiler.plugin("emit", function (curCompiler, callback) {
|
||||
// Get stats.
|
||||
// **Note**: In future, could pass something like `{ showAssets: true }`
|
||||
// to the `getStats()` function for more limited object returned.
|
||||
var stats = curCompiler.getStats().toJson();
|
||||
|
||||
// Filter to fields.
|
||||
if (self.opts.fields) {
|
||||
stats = self.opts.fields.reduce(function (memo, key) {
|
||||
memo[key] = stats[key];
|
||||
return memo;
|
||||
}, {});
|
||||
}
|
||||
|
||||
// Transform to string.
|
||||
var statsStr = self.opts.transform(stats, {
|
||||
compiler: curCompiler
|
||||
});
|
||||
|
||||
curCompiler.assets[self.opts.filename] = {
|
||||
source: function () {
|
||||
return statsStr;
|
||||
},
|
||||
size: function () {
|
||||
return statsStr.length;
|
||||
}
|
||||
};
|
||||
|
||||
callback();
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = StatsWriterPlugin;
|
||||
Reference in New Issue
Block a user