UNPKG

@lark-project/cli

Version:

飞书项目插件开发工具

72 lines (71 loc) 3.51 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.checkNpmOrigin = void 0; const axios_1 = __importDefault(require("axios")); const child_process_1 = require("child_process"); const logger_1 = require("./logger"); // 插件 init 的逻辑,检测npm最优源 const originList = [ 'https://registry.npmjs.org/', 'https://r.cnpmjs.org/', 'https://registry.npmmirror.com/', ]; const getOriginList = (registry) => { // 当前源在检测源列表内 if (originList.find(i => i.includes(registry))) { return originList; } return originList.concat([registry]); }; const checkNpmOriginSpeed = (registry) => { return new Promise(resolve => { // 发起 HTTP 请求 const startTime = Date.now(); axios_1.default.get(registry).then(() => { resolve({ timing: Date.now() - startTime, registry }); }).catch(() => { resolve({ timing: 10000, registry: null }); }); }); }; const checkNpmOrigin = async () => { const registry = (0, child_process_1.execSync)('npm config get registry').toString(); return Promise.all([...getOriginList(registry).map(checkNpmOriginSpeed), new Promise(r => setTimeout(() => r({ timing: 1000, registry: null }), 1000))]).then((res) => { const sortedResult = res.sort((a, b) => a.timing - b.timing); if (sortedResult[0].registry === null) { // 连接npm源都超时,需要检测当前网络环境 logger_1.logger.error('connect npm registry timeout, please check your network environment'); return; } const sortedOriginList = sortedResult.filter(i => i.registry !== null); const fastOrigin = sortedOriginList[0]; const currentOrigin = sortedOriginList.find(i => registry.includes(i.registry)); if (currentOrigin.timing <= fastOrigin.timing) { // 当前使用的就是最快的npm源 logger_1.logger.info('current npm registry is fast, registry:', registry, ',timing:', fastOrigin.timing); process.exit(0); return; } logger_1.logger.debug('npm origin result:', sortedOriginList); // 当前不是最快的npm源,推荐可切换至最快的npm源 logger_1.logger.warn('current npm registry is not fast:'); const data = sortedOriginList.map(i => [i.registry === registry ? '*' : '', i.timing, i.registry]); const title = ['current |', ' timing(ms) ', '| registry']; const logList = data.map(([point, timing, registry]) => { const first = ` ${point}${new Array(title[0].length - (point.length + 2)).fill(' ').join('')}`; const second = `${timing}${new Array(title[1].length - timing.toString().length).fill(' ').join('')}`; return `${first} ${second} ${registry}${registry.includes('\n') ? '' : '\n'}`; }).join(''); console.warn(title.join('')); console.log(logList); logger_1.logger.info(`recommend npm registry: ${fastOrigin.registry} cost ${fastOrigin.timing}ms`); const prompt = 'you can switch to it with: '; console.warn(prompt); console.log(new Array(prompt.length).fill(' ').join('') + 'npm config set registry', fastOrigin.registry); process.exit(0); }); }; exports.checkNpmOrigin = checkNpmOrigin;