Files

46 lines
1.7 KiB
JavaScript
Raw Permalink Normal View History

2025-11-14 11:39:33 +08:00
const crypto = require('crypto');
const { generateAsset } = require('./utils');
const emitFileCaches = {};
function md5 (str) {
const hash = crypto.createHash('md5');
hash.update(str);
return hash.digest('hex');
}
function emitFile (filePath, source, compilation) {
const emitFileMD5 = md5(filePath + source);
if (emitFileCaches[filePath] !== emitFileMD5) {
emitFileCaches[filePath] = emitFileMD5;
compilation.assets[filePath] = generateAsset(source);
}
}
// 为独立分包【生成】入口执行文件代替主包中的app.js
class GenerateIndepndentEntryPlugin {
apply (compiler) {
compiler.hooks.emit.tapPromise('GenerateIndepndentEntryPlugin', compilation => {
return new Promise((resolve, reject) => {
try {
// debugger
const independentPkgs = Object.values(process.UNI_SUBPACKAGES).filter(subPkgItem => subPkgItem.independent) || [];
const independentEntry = independentPkgs.map(independentPkgItem => {
return {
file: `${independentPkgItem.root}/common/index.js`,
source: `require('runtime.js');require('library.js');require('vendor.js');require('main.js');`,
};
});
independentEntry.forEach(({ file, source }) => emitFile(file, source, compilation));
resolve();
} catch (e) {
console.error('independent.error', 'GenerateIndepndentEntryPlugin', e);
reject(e);
}
});
});
}
}
module.exports = GenerateIndepndentEntryPlugin;