xiaofu-ruoyi-vue/node_modules/script-ext-html-webpack-plugin/lib/async-chunk-resource-hints.js

46 lines
1.2 KiB
JavaScript

'use strict';
const CHUNK_OPTIONS = ['all', 'async'];
const getPublicPath = require('./common.js').getPublicPath;
const createResourceHint = require('./resource-hints.js').createResourceHint;
const matches = require('./common.js').matches;
const addAsyncChunkResourceHints = (chunks, options) => {
const getRef = generateRef(options);
const hints = [];
chunks
.filter(chunk => !isInitial(chunk))
.reduce(
(files, chunk) => files.concat(chunk.files),
[])
.forEach(file => {
if (optionsMatch(options.preload, file)) {
hints.push(createResourceHint('preload', getRef(file)));
} else if (optionsMatch(options.prefetch, file)) {
hints.push(createResourceHint('prefetch', getRef(file)));
}
});
return hints;
};
const isInitial = chunk =>
chunk.canBeInitial
? chunk.canBeInitial()
: chunk.isInitial
? chunk.isInitial()
: chunk.isInitial;
const optionsMatch = (option, file) => {
return matches(option.chunks, CHUNK_OPTIONS) && matches(file, option.test);
};
const generateRef = options => {
const publicPath = getPublicPath(options);
return publicPath
? file => publicPath + file
: file => file;
};
module.exports = addAsyncChunkResourceHints;