UNPKG

@tarojs/cli

Version:
139 lines 6.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const path = require("node:path"); const ora = require("ora"); const validatePkgName = require("validate-npm-package-name"); const util_1 = require("../../util"); const PRESET_OR_PLUGIN_COMMAND_CHINESE_MAP_MAP = { install: '添加', uninstall: '删除' }; const PRESET_OR_PLUGIN_CHINESE_NAME_MAP = { plugin: '插件', preset: '插件集' }; const PLUGIN_TYPE_TO_CONFIG_KEY = { plugin: 'plugins', preset: 'presets' }; exports.default = (ctx) => { ctx.registerCommand({ name: 'global-config', synopsisList: [ 'taro global-config add-plugin [pluginName]', 'taro global-config remove-plugin [pluginName]', 'taro global-config add-preset [presetName]', 'taro global-config remove-preset [presetName]', 'taro global-config reset', ], optionsMap: { '-r --registry [url]': '指定 npm registry', '-h, --help': 'output usage information' }, fn({ _, options }) { const [, action, pluginName] = _; const { getUserHomeDir, TARO_GLOBAL_CONFIG_DIR, fs, TARO_GLOBAL_CONFIG_FILE } = ctx.helper; const homedir = getUserHomeDir(); const globalPluginConfigDir = path.join(homedir, TARO_GLOBAL_CONFIG_DIR); if (!homedir) return console.log('找不到用户根目录'); const rootPath = (0, util_1.getRootPath)(); const templatePath = path.join(rootPath, 'templates', 'global-config'); const registry = options.registry || options.r; function makeSureConfigExists() { if (!fs.existsSync(globalPluginConfigDir)) { const spinner = ora(`目录不存在,全局配置初始化`).start(); try { fs.copySync(templatePath, globalPluginConfigDir); spinner.succeed(`全局配置初始化成功,${globalPluginConfigDir}`); } catch (e) { spinner.fail(`全局配置初始化失败,${e}`); process.exit(1); } } } function addOrRemovePresetOrPlugin(actionType, pluginType) { makeSureConfigExists(); const presetOrPluginChineseName = PRESET_OR_PLUGIN_CHINESE_NAME_MAP[pluginType]; const chineseCommand = PRESET_OR_PLUGIN_COMMAND_CHINESE_MAP_MAP[actionType]; if (!pluginName) { console.error(`缺少要${chineseCommand}${presetOrPluginChineseName}`); process.exit(1); } const spinner = ora(`开始${chineseCommand}${presetOrPluginChineseName} ${pluginName}`).start(); const pluginWithoutVersionName = (0, util_1.getPkgNameByFilterVersion)(pluginName); if (!validatePkgName(pluginWithoutVersionName).validForNewPackages) { spinner.fail('安装的插件名不合规!'); process.exit(1); } let command = `cd ${globalPluginConfigDir} && npm ${actionType} ${pluginName}`; if (registry) { command += ` --registry=${registry}`; } (0, util_1.execCommand)({ command, successCallback(data) { console.log(data.replace(/\n$/, '')); spinner.start(`开始修改${presetOrPluginChineseName}配置`); const configFilePath = path.join(globalPluginConfigDir, TARO_GLOBAL_CONFIG_FILE); let globalConfig; try { globalConfig = fs.readJSONSync(configFilePath); } catch (e) { spinner.fail('获取配置文件失败'); } const configKey = PLUGIN_TYPE_TO_CONFIG_KEY[pluginType]; const configItem = globalConfig[configKey] || []; const pluginIndex = configItem.findIndex((item) => { if (typeof item === 'string') return item === pluginWithoutVersionName; if (item instanceof Array) return (item === null || item === void 0 ? void 0 : item[0]) === pluginWithoutVersionName; }); const shouldChangeFile = !(Number(pluginIndex !== -1) ^ Number(actionType === 'uninstall')); if (shouldChangeFile) { actionType === 'install' ? configItem.push(pluginWithoutVersionName) : configItem.splice(pluginIndex, 1); try { fs.writeJSONSync(configFilePath, { [configKey]: configItem }); } catch (e) { spinner.fail(`修改配置文件失败:${e}`); } } spinner.succeed('修改配置文件成功'); }, failCallback(data) { spinner.stop(); spinner.warn(data.replace(/\n$/, '')); } }); } switch (action) { case 'add-plugin': addOrRemovePresetOrPlugin('install', 'plugin'); break; case 'remove-plugin': addOrRemovePresetOrPlugin('uninstall', 'plugin'); break; case 'add-preset': addOrRemovePresetOrPlugin('install', 'preset'); break; case 'remove-preset': addOrRemovePresetOrPlugin('uninstall', 'preset'); break; case 'reset': if (fs.existsSync(globalPluginConfigDir)) fs.removeSync(globalPluginConfigDir); fs.copySync(templatePath, globalPluginConfigDir); break; default: console.error('请输出正确的参数'); } } }); }; //# sourceMappingURL=global-config.js.map