webpack-manifest-resource-plugin
Advanced tools
Comparing version 1.1.0-beta.1 to 2.0.0
2.0.0 / 2017-12-08 | ||
================== | ||
* feat: webpack dll manifest merge project manifest | ||
1.0.0 / 2017-11-09 | ||
@@ -3,0 +9,0 @@ ================== |
var path = require('path'); | ||
var fs = require('fs'); | ||
var fse = require('fs-extra'); | ||
@@ -15,2 +16,3 @@ var _ = require('lodash'); | ||
transformExtensions: /^(gz|map)$/i, | ||
asset: true, | ||
writeToFileEmit: false, | ||
@@ -21,3 +23,3 @@ seed: null, | ||
generate: null, | ||
sort: null, | ||
sort: null | ||
}, opts || {}); | ||
@@ -59,2 +61,10 @@ } | ||
ManifestPlugin.prototype.isMatch = (regexArray, strMatch, defaultMatch = false) => { | ||
if (!regexArray || (Array.isArray(regexArray) && regexArray.length === 0)) { | ||
return defaultMatch; | ||
} | ||
regexArray = Array.isArray(regexArray) ? regexArray : [regexArray]; | ||
return regexArray.some(item => new RegExp(item, '').test(strMatch)); | ||
}; | ||
ManifestPlugin.prototype.getDeps = function(manifest, commonsChunk) { | ||
@@ -64,15 +74,43 @@ const commonScriptPaths = []; | ||
const manifestDeps = {}; | ||
let commonsChunkItemIsString = true; | ||
commonsChunk.forEach(item => { | ||
const jsKey = `${item}.js`; | ||
const cssKey = `${item}.css`; | ||
manifest[jsKey] && commonScriptPaths.push(manifest[jsKey]); | ||
manifest[cssKey] && commonCSSPaths.push(manifest[cssKey]); | ||
commonsChunkItemIsString = typeof item === 'string'; | ||
if (commonsChunkItemIsString) { | ||
const jsKey = `${item}.js`; | ||
const cssKey = `${item}.css`; | ||
manifest[jsKey] && commonScriptPaths.push(manifest[jsKey]); | ||
manifest[cssKey] && commonCSSPaths.push(manifest[cssKey]); | ||
} | ||
}); | ||
Object.keys(manifest).forEach(item => { | ||
if (/\.js$/.test(item) && !commonsChunk.includes(item.replace(/\.js$/, ''))) { | ||
manifestDeps[item] = { | ||
js: commonScriptPaths.concat(manifest[item]), | ||
css: commonCSSPaths.concat(manifest[item.replace(/\.js$/, '.css')] || []), | ||
}; | ||
Object.keys(manifest).forEach(pageKey => { | ||
if (/\.js$/.test(pageKey)) { | ||
const pageName = pageKey.replace(/\.js$/, ''); | ||
if (commonsChunkItemIsString) { | ||
// 不处理公共 commonsChunk 依赖 | ||
if (!commonsChunk.includes(pageName)) { | ||
manifestDeps[pageKey] = { | ||
js: commonScriptPaths.concat(manifest[pageKey]), | ||
css: commonCSSPaths.concat(manifest[pageKey.replace(/\.js$/, '.css')] || []), | ||
}; | ||
} | ||
} else { | ||
const pageCommonScriptPaths = []; | ||
const pageCommonCSSPaths = []; | ||
const isCommonsChunk = commonsChunk.find(dll =>{ | ||
return dll.name === pageName; | ||
}); | ||
commonsChunk.forEach(dll => { | ||
if (!isCommonsChunk && this.isMatch(dll.include, pageName, true) && !this.isMatch(dll.exclude, pageName, false)) { | ||
const jsKey = `${dll.name}.js`; | ||
const cssKey = `${dll.name}.css`; | ||
manifest[jsKey] && pageCommonScriptPaths.push(manifest[jsKey]); | ||
manifest[cssKey] && pageCommonCSSPaths.push(manifest[cssKey]); | ||
} | ||
}); | ||
manifestDeps[pageKey] = { | ||
js: pageCommonScriptPaths.concat(manifest[pageKey]), | ||
css: pageCommonCSSPaths.concat(manifest[pageKey.replace(/\.js$/, '.css')] || []), | ||
}; | ||
} | ||
} | ||
@@ -84,16 +122,26 @@ }); | ||
ManifestPlugin.prototype.getResource = function(manifest, publicPath) { | ||
var buildPath = this.opts.buildPath.replace(this.opts.baseDir, '').replace(/^\//, ''); | ||
var fileNormalizeManifest = this.normalizeFile(manifest, publicPath); | ||
var normalizeManifest = this.normalize(manifest); | ||
var manifestDll = this.opts.manifestDll; | ||
const buildPath = this.opts.buildPath.replace(this.opts.baseDir, '').replace(/^\//, ''); | ||
const normalizeManifest = this.normalize(manifest); | ||
const manifestDll = this.opts.manifestDll; | ||
if (manifestDll && typeof manifestDll === 'boolean') { | ||
return normalizeManifest; | ||
} else { | ||
if (manifestDll && typeof manifestDll === 'object') { | ||
Object.keys(manifestDll).forEach(key => { | ||
normalizeManifest[key] = manifestDll[key]; | ||
const commonsChunk = this.opts.commonsChunk; | ||
const dllConfig = this.opts.dllConfig; | ||
if (dllConfig) { // 合并 dll manifest 到 manifest | ||
const dllDir = this.opts.dllDir; | ||
const dllArray = Array.isArray(dllConfig) ? dllConfig : [dllConfig]; | ||
dllArray.forEach(item => { | ||
const dllManifestPath = path.join(dllDir, `config/manifest-${item.name}.json`); | ||
if (fs.existsSync(dllManifestPath)) { | ||
const dllManifestJSON = require(dllManifestPath); | ||
Object.keys(dllManifestJSON).forEach(key => { | ||
normalizeManifest[key] = dllManifestJSON[key]; | ||
}); | ||
commonsChunk.push(item); | ||
} | ||
}); | ||
} | ||
var depsManifest = this.getDeps(normalizeManifest, this.opts.commonsChunk); | ||
return Object.assign({}, fileNormalizeManifest, { | ||
const depsManifest = this.getDeps(normalizeManifest, commonsChunk); | ||
return Object.assign({}, normalizeManifest, { | ||
deps: depsManifest, | ||
@@ -229,15 +277,16 @@ info: { publicPath, buildPath } | ||
var json = JSON.stringify(resource, null, 2); | ||
var outputFolder = compilation.options.output.path; | ||
var outputFile = path.resolve(compilation.options.output.path, this.opts.fileName); | ||
var outputName = path.relative(outputFolder, outputFile); | ||
var outputFile = this.opts.filepath ? this.opts.filepath : path.resolve(compilation.options.output.path, this.opts.fileName); | ||
var outputName = this.opts.filepath ? path.basename(this.opts.filepath) : path.relative(outputFolder, outputFile); | ||
compilation.assets[outputName] = { | ||
source: function() { | ||
return json; | ||
}, | ||
size: function() { | ||
return json.length; | ||
} | ||
}; | ||
if (this.opts.assets) { | ||
compilation.assets[outputName] = { | ||
source: function() { | ||
return json; | ||
}, | ||
size: function() { | ||
return json.length; | ||
} | ||
}; | ||
} | ||
@@ -244,0 +293,0 @@ if (this.opts.writeToFileEmit) { |
{ | ||
"name": "webpack-manifest-resource-plugin", | ||
"version": "1.1.0-beta.1", | ||
"version": "2.0.0", | ||
"description": "manifest resource dependencies", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
13230
271
0
3