@lark-project/cli
Version:
飞书项目插件开发工具
72 lines (71 loc) • 3.51 kB
JavaScript
;
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;