UNPKG

build-plugin-fusion

Version:

plugin for build scripts while use fusion component

121 lines 5.38 kB
/* eslint-disable import/no-dynamic-require */ /** * 检测 ICE 组件的依赖问题 * - 部分代码直接借鉴了 duplicate-package-checker-webpack-plugin */ var path = require('path'); var findRoot = require('find-root'); var semver = require('semver'); var bizComponentsVersion = require('./bizComponentsVersion'); var deprecatedComponents = require('./deprecatedComponents'); var depModules = {}; module.exports = /** @class */ (function () { function CheckDepsPlugin(options) { this.pkg = options.pkg || {}; this.log = options.log; } CheckDepsPlugin.prototype.apply = function (compiler) { var _this = this; compiler.hooks.emit.tapAsync('CheckDepsPlugin', function (compilation, callback) { compilation.modules.forEach(function (module) { if (!module.resource) { return; } var closestPackage = getClosestPackage(module.resource); // Skip module if no closest package is found if (!closestPackage) { return; } var pkg = closestPackage.package; if (!depModules[pkg.name]) { depModules[pkg.name] = [pkg.version]; } else if (depModules[pkg.name].indexOf(pkg.version) === -1) { depModules[pkg.name].push(pkg.version); } }); // 1. 多份基础组件 var baseComponentDeps = ['@icedesign/base', '@alife/next', '@ali/ice'].filter(function (name) { return depModules[name]; }); if (baseComponentDeps.length > 1) { _this.log.warn("\u9879\u76EE\u4F9D\u8D56\u4E86\u591A\u4EFD\u57FA\u7840\u7EC4\u4EF6 ".concat(baseComponentDeps, "\uFF0C\u5EFA\u8BAE\u901A\u8FC7\u914D\u7F6E buildConfig.uniteBaseComponent \u4F18\u5316")); } // 2. 业务组件与基础组件的版本对应关系 var pkgDirectDeps = _this.pkg.dependencies || {}; var depFdNext = pkgDirectDeps['@alifd/next']; var depFeNext = pkgDirectDeps['@ali/ice'] || pkgDirectDeps['@icedesign/base'] || pkgDirectDeps['@alife/next']; if (depFeNext && !depFdNext) { // 只依赖了 0.x 的项目应该使用 0.x 的业务组件 Object.keys(depModules).forEach(function (moduleName) { checkBizComponentVersion({ npmName: moduleName, npmVersion: depModules[moduleName][0], baseVersion: '0.x', log: _this.log, }); }); } if (depFdNext && !depFeNext) { // 只依赖了 1.x 的项目应该使用 1.x 的业务组件 Object.keys(depModules).forEach(function (moduleName) { checkBizComponentVersion({ npmName: moduleName, npmVersion: depModules[moduleName][0], baseVersion: '1.x', log: _this.log, }); }); } // 3. 不维护的业务组件 Object.keys(depModules).forEach(function (moduleName) { var deprecatedMsg = deprecatedComponents[moduleName]; if (deprecatedMsg) { _this.log.warn(deprecatedMsg); } }); callback(); }); }; return CheckDepsPlugin; }()); // Get closest package definition from path function getClosestPackage(modulePath) { var root; var pkg; // Catch findRoot or require errors try { root = findRoot(modulePath); // eslint-disable-next-line pkg = require(path.join(root, 'package.json')); } catch (e) { return null; } // If the package.json does not have a name property, try again from // one level higher. // https://github.com/jsdnxx/find-root/issues/2 // https://github.com/date-fns/date-fns/issues/264#issuecomment-265128399 if (!pkg.name) { return getClosestPackage(path.resolve(root, '..')); } return { package: pkg, path: root, }; } function checkBizComponentVersion(_a) { var npmName = _a.npmName, npmVersion = _a.npmVersion, baseVersion = _a.baseVersion, log = _a.log; if (!bizComponentsVersion[npmName]) { // 未统计到或者 0.x&1.x 兼容的业务组件 return; } var semverVersion = bizComponentsVersion[npmName][baseVersion]; if (!semverVersion) { // 没有对应的(未升级) log.warn("".concat(npmName, " \u6682\u65F6\u6CA1\u6709\u7B26\u5408\u57FA\u7840\u7EC4\u4EF6 ").concat(baseVersion, " \u7684\u7248\u672C\uFF0C\u5EFA\u8BAE\u8054\u7CFB ICE \u56E2\u961F\u534F\u52A9\u5347\u7EA7")); } if (!semver.satisfies(npmVersion, semverVersion)) { // 不符合版本 log.warn("\u9879\u76EE\u4F7F\u7528\u7684\u57FA\u7840\u7EC4\u4EF6\u7248\u672C\u662F ".concat(baseVersion, "\uFF0C\u4E1A\u52A1\u7EC4\u4EF6 ").concat(npmName, "@").concat(npmVersion, " \u4E0D\u7B26\u5408\u7248\u672C\u8981\u6C42 ").concat(semverVersion, "\uFF0C\u5EFA\u8BAE\u9009\u62E9\u6B63\u786E\u7684\u7EC4\u4EF6\u7248\u672C")); } } //# sourceMappingURL=index.js.map