mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-17 17:36:08 +08:00
css-loader 0.28->3.5 del 4.1->5.1 eslint 5.18->6.8 eslint-config-airbnb 17.1->18.1 eslint-loader 2.1->4.0 file-loader 2.0->6.0 fs.extra 8.0->9.0 gulp 2.0->3.0 gulp-nunjucks 4.0->5.0 json-loader 0.5->Removed style-loader 0.23->1.1 uglifyjs-webpack-plugin 1.3->2.2 yargs 13.2->15.3 katex 0.10->0.11 react-monaco-editor 0.35->0.36 timeage-react 1.2->3.0 timeago.js 3.0->4.0 uuid 3.3->7.0
51 lines
1.5 KiB
JavaScript
51 lines
1.5 KiB
JavaScript
/* eslint-disable import/no-extraneous-dependencies */
|
|
const _ = require('lodash');
|
|
const crypto = require('crypto');
|
|
|
|
export default class StaticManifestPlugin {
|
|
constructor({ fileName, ignore }) {
|
|
this.fileName = fileName;
|
|
this.ignore = ignore;
|
|
}
|
|
|
|
apply(compiler) {
|
|
compiler.plugin('emit', (compilation, callback) => {
|
|
const stats = compilation.getStats().toJson();
|
|
const manifest = _(stats.assets)
|
|
.map((asset) => {
|
|
const { name } = asset;
|
|
// Skip files listed in ignore
|
|
if (_.some(this.ignore, (ignorePattern) => name.indexOf(ignorePattern) > -1)) {
|
|
return null;
|
|
}
|
|
// Skip calculating hash for names like ?xxxx
|
|
if (name.indexOf('?') > -1) {
|
|
return [
|
|
name.replace(/\?[\s\S]*/, ''), // origin name
|
|
name, // name with hash
|
|
];
|
|
}
|
|
// We need to calculate hash for the remaining files.
|
|
const source = compilation.assets[asset.name].source();
|
|
const shasum = crypto.createHash('sha1');
|
|
shasum.update(source);
|
|
const hash = shasum.digest('hex').substr(0, 10);
|
|
return [
|
|
name, // origin name
|
|
`${name}?${hash}`, // name with hash
|
|
];
|
|
})
|
|
.filter()
|
|
.orderBy(['0'])
|
|
.fromPairs()
|
|
.value();
|
|
const json = JSON.stringify(manifest, null, 2);
|
|
compilation.assets[this.fileName] = {
|
|
source: () => json,
|
|
size: () => json.length,
|
|
};
|
|
callback();
|
|
});
|
|
}
|
|
}
|