UNPKG

@iot-studio/material-toolkit-utils

Version:

material 工具链相关工具

129 lines (128 loc) 4.46 kB
"use strict"; /** * 处理包依赖关系,应用于编译时和运行时 */ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.lib = exports.getCDN = exports.externals = void 0; var path_1 = __importDefault(require("path")); var deps_json_1 = __importDefault(require("./external_config/deps.json")); var libNames_json_1 = __importDefault(require("./external_config/libNames.json")); var hash = {}; libNames_json_1.default.forEach(function (fileName) { var item = require("./external_config/libs/" + fileName); hash[fileName.replace(/\.json$/, "")] = item; }); function findClosestModVersion(modName, context) { var dirs = context.split('/'); var version; while (true && dirs.length > 0) { var packageJsonPath = path_1.default.resolve.apply(path_1.default, __spreadArray(__spreadArray([], dirs, false), ['node_modules', modName, 'package.json'], false)); try { var packageJson = require(packageJsonPath); version = packageJson.version; break; } catch (e) { // 找上一级目录 dirs.pop(); } } if (!version) { return null; } var versions = version.split('.'); if (+versions[0] > 0) { return versions[0]; } return '0.' + versions[1]; } function externals(onExternal, omit, exception, onTrans) { if (omit === void 0) { omit = []; } if (exception === void 0) { exception = []; } var externals = {}; var modHash = {}; Object.keys(hash).forEach(function (modName) { var map = hash[modName]; var version = modName.split('@')[1]; Object.keys(map).forEach(function (pathName) { var pathNameWithVersion = pathName + '@' + version; modHash[pathNameWithVersion] = modName; modHash[pathName] = modName; externals[pathNameWithVersion] = map[pathName]; externals[pathName] = map[pathName]; }); }); var externalMods = {}; return function (context, request, callback) { var version = findClosestModVersion(request, context); var requestKey = version ? request + '@' + version : request; if (externals[requestKey] && exception.indexOf(modHash[request]) === -1) { onTrans && onTrans(modHash[requestKey]); if (omit.indexOf(request) === -1) { if (!externalMods[modHash[requestKey]]) { externalMods[modHash[requestKey]] = true; onExternal && onExternal(modHash[requestKey]); } return callback(null, externals[requestKey]); } } callback(); }; } exports.externals = externals; function dependencies(packageName) { return deps_json_1.default[packageName] || []; } function getCDN(packages) { var hasRun = {}; var result = []; packages.forEach(function dep(pkg) { if (hasRun[pkg]) { return; } result.push(pkg); hasRun[pkg] = true; (deps_json_1.default[pkg] || []).forEach(function (item) { var itemIndex = result.indexOf(item); var currentIndex = result.indexOf(pkg); if (itemIndex !== -1) { if (itemIndex < currentIndex) { dep(item); return; } result.splice(itemIndex, 1); } result.splice(currentIndex, 0, item); dep(item); }); }); return result.map(function (item) { return item + '.js'; }); } exports.getCDN = getCDN; function lib() { var externals = {}; [].forEach.call(arguments, function (name) { if (hash[name]) { Object.assign(externals, hash[name]); } else { console.log(name + "不是CDN上的公共包"); } }); return externals; } exports.lib = lib;