UNPKG

create-bfe-cttq

Version:

CTTQ大前端脚手架项目

60 lines (57 loc) 1.89 kB
const { isFunction, isObject, isString} = require("./shared"); const mergeDeps = require("./mergeDeps") const deepmerge = require("./deepMerge") const { mergeArrayWithDedupe } = require("./deepMerge"); function pruneObject (obj) { if (typeof obj === 'object') { for (const k in obj) { if (!Object.prototype.hasOwnProperty.call(obj, k)) { continue } if (obj[k] == null) { delete obj[k] } else { obj[k] = pruneObject(obj[k]) } } } return obj } module.exports = (flag, pkg, toMerge, conflictDepSources, options = {}) => { const extendOptions = { prune: false, merge: true, warnIncompatibleVersions: true, forceOverwrite: false } if (typeof options === 'boolean') { extendOptions.warnIncompatibleVersions = !options } else { Object.assign(extendOptions, options) } for (const key in toMerge) { const value = toMerge[key] const existing = pkg[key] if (isObject(value) && (key === 'dependencies' || key === 'devDependencies')) { // use special version resolution merge pkg[key] = mergeDeps( flag, existing || {}, value, conflictDepSources, extendOptions ) } else if (!extendOptions.merge || !(key in pkg)) { pkg[key] = value } else if (Array.isArray(value) && Array.isArray(existing)) { pkg[key] = mergeArrayWithDedupe(existing, value) } else if (isObject(value) && isObject(existing)) { pkg[key] = deepmerge(existing, value, { arrayMerge: mergeArrayWithDedupe }) } else { pkg[key] = value } } if (extendOptions.prune) { pruneObject(pkg) } }