From b20982401547c20e869cf57326570b7ee34f2ee8 Mon Sep 17 00:00:00 2001 From: "guo.xu" Date: Thu, 28 Jan 2021 21:03:27 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=B0=83=E6=95=B4=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 -- .../README.md | 0 .../package.json | 19 +++++----- .../src/index.ts} | 8 ++--- .../tsconfig.json | 4 +-- packages/cli/bin/xus.js | 3 ++ packages/cli/package.json | 16 +++++---- packages/cli/src/Cli.ts | 35 +++++++++++++++---- packages/cli/src/builtInPlugins/index.ts | 8 ----- packages/cli/src/index.ts | 18 ++-------- packages/cli/src/manager/ConfigManager.ts | 2 +- packages/cli/src/manager/EnvManager.ts | 2 +- packages/cli/src/types/plugins.ts | 5 +-- .../src => cli/src/utils}/env.ts | 0 .../src => cli/src/utils}/index.ts | 1 + .../src => cli/src/utils}/logger.ts | 0 .../src => cli/src/utils}/module.ts | 0 .../src => cli/src/utils}/validator.ts | 0 packages/cli/src/xus.ts | 14 ++++++++ packages/cli/tsconfig.json | 4 +-- 20 files changed, 82 insertions(+), 60 deletions(-) rename packages/{cli-shared-utils => cli-plugin-command-help}/README.md (100%) rename packages/{cli-shared-utils => cli-plugin-command-help}/package.json (62%) rename packages/{cli/src/builtInPlugins/commands/help.ts => cli-plugin-command-help/src/index.ts} (86%) rename packages/{cli-shared-utils => cli-plugin-command-help}/tsconfig.json (78%) create mode 100755 packages/cli/bin/xus.js delete mode 100644 packages/cli/src/builtInPlugins/index.ts rename packages/{cli-shared-utils/src => cli/src/utils}/env.ts (100%) rename packages/{cli-shared-utils/src => cli/src/utils}/index.ts (78%) rename packages/{cli-shared-utils/src => cli/src/utils}/logger.ts (100%) rename packages/{cli-shared-utils/src => cli/src/utils}/module.ts (100%) rename packages/{cli-shared-utils/src => cli/src/utils}/validator.ts (100%) create mode 100644 packages/cli/src/xus.ts diff --git a/.gitignore b/.gitignore index d4e8809..6704566 100644 --- a/.gitignore +++ b/.gitignore @@ -102,6 +102,3 @@ dist # TernJS port file .tern-port - -# dist -packages/**/lib/ \ No newline at end of file diff --git a/packages/cli-shared-utils/README.md b/packages/cli-plugin-command-help/README.md similarity index 100% rename from packages/cli-shared-utils/README.md rename to packages/cli-plugin-command-help/README.md diff --git a/packages/cli-shared-utils/package.json b/packages/cli-plugin-command-help/package.json similarity index 62% rename from packages/cli-shared-utils/package.json rename to packages/cli-plugin-command-help/package.json index 2113ef7..30296b0 100644 --- a/packages/cli-shared-utils/package.json +++ b/packages/cli-plugin-command-help/package.json @@ -1,30 +1,31 @@ { - "name": "@xus/cli-shared-utils", + "name": "@xus/cli-plugin-command-help", "version": "0.0.1", - "description": "xus cli-shared-utils", - "main": "lib/index.js", - "typings": "lib/index.d.ts", + "description": "xus cli plugin command-help", + "main": "dist/index.js", + "typings": "dist/index.d.ts", "keywords": [ - "cli-shared-utils" + "cli", + "rollup" ], "author": "guo.xu ", "homepage": "https://github.com/xus-code/bundle-tools/tree/master/packages/cli#readme", "license": "MIT", "files": [ - "lib" + "dist" ], "repository": { "type": "git", "url": "git+https://github.com/xus-code/bundle-tools.git" }, "scripts": { - "dev:utils": "tsc --watch", - "build:utils": "tsc" + "dev:chelp": "tsc --watch", + "build:chelp": "tsc" }, "bugs": { "url": "https://github.com/xus-code/bundle-tools/issues" }, "dependencies": { - "joi": "^17.3.0" + "@xus/cli": "^0.0.1" } } diff --git a/packages/cli/src/builtInPlugins/commands/help.ts b/packages/cli-plugin-command-help/src/index.ts similarity index 86% rename from packages/cli/src/builtInPlugins/commands/help.ts rename to packages/cli-plugin-command-help/src/index.ts index 4e1ce83..44f1e11 100644 --- a/packages/cli/src/builtInPlugins/commands/help.ts +++ b/packages/cli-plugin-command-help/src/index.ts @@ -1,10 +1,10 @@ -import { Commands, Command } from './../../types' -import { IPluginAPI } from '../../PluginAPI' -import { info } from '@xus/cli-shared-utils' +import type { Command, Commands, IPluginAPI, Args } from '@xus/cli' +import { info } from '@xus/cli' import chalk from 'chalk' export default function (api: IPluginAPI): void { - api.registerCommand('help', (args) => { + api.registerCommand('help', (args: Args) => { + console.log(`cmd `, args) const commandName = args._[0] if (!commandName) { // log all diff --git a/packages/cli-shared-utils/tsconfig.json b/packages/cli-plugin-command-help/tsconfig.json similarity index 78% rename from packages/cli-shared-utils/tsconfig.json rename to packages/cli-plugin-command-help/tsconfig.json index 9b4c2ad..af74b8a 100644 --- a/packages/cli-shared-utils/tsconfig.json +++ b/packages/cli-plugin-command-help/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { - "outDir": "./lib", + "outDir": "./dist" }, "extends": "../../tsconfig.json", "include": ["./src/**/*"] -} \ No newline at end of file +} diff --git a/packages/cli/bin/xus.js b/packages/cli/bin/xus.js new file mode 100755 index 0000000..dbe08b4 --- /dev/null +++ b/packages/cli/bin/xus.js @@ -0,0 +1,3 @@ +#!/usr/bin/env node + +require('../dist/xus') diff --git a/packages/cli/package.json b/packages/cli/package.json index ba567a5..85af57b 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -6,15 +6,18 @@ "cli", "bundle" ], - "author": "guo.xu ", - "homepage": "https://github.com/xus-code/bundle-tools/tree/master/packages/cli#readme", - "license": "MIT", "bin": { - "xus-cli": "./lib/index.js" + "xus": "bin/xus.js" }, + "main": "dist/index.js", + "types": "dist/index.d.ts", "files": [ - "lib" + "dist", + "bin" ], + "author": "guo.xu ", + "homepage": "https://github.com/xus-code/bundle-tools/tree/master/packages/cli#readme", + "license": "MIT", "repository": { "type": "git", "url": "git+https://github.com/xus-code/bundle-tools.git" @@ -27,8 +30,9 @@ "url": "https://github.com/xus-code/bundle-tools/issues" }, "dependencies": { - "@xus/cli-shared-utils": "^0.0.1", + "@xus/cli-plugin-command-help": "^0.0.1", "chalk": "^4.1.0", + "joi": "^17.3.0", "minimist": "^1.2.5" }, "devDependencies": { diff --git a/packages/cli/src/Cli.ts b/packages/cli/src/Cli.ts index be44b9c..3a142ab 100644 --- a/packages/cli/src/Cli.ts +++ b/packages/cli/src/Cli.ts @@ -1,11 +1,10 @@ // types -import { Commands, Args, RawArgs, Plugin } from './types' -import { error } from '@xus/cli-shared-utils' +import { Commands, Args, RawArgs, Plugin, PluginApply } from './types' +import { error, loadModule } from './utils' import ConfigManager, { IConfigManager } from './manager/ConfigManager' import PathManager, { IPathManager } from './manager/PathManager' import EnvManager, { IEnvManager } from './manager/EnvManager' import PluginAPI from './PluginAPI' -import { BuiltInPlugins } from './builtInPlugins' class Cli { private initialized = false @@ -20,14 +19,14 @@ class Cli { this.PathManager = new PathManager(context) this.EnvManager = new EnvManager(this.PathManager) this.ConfigManager = new ConfigManager(this.PathManager) - - this.plugins = this.resolvePlugins() } // 启动 cli async setupCli(): Promise { if (this.initialized) return this.initialized = true + // load plugin + this.plugins = await this.resolvePlugins() // 1. load config await this.ConfigManager.loadUserConfig() // 2. apply plugins @@ -37,9 +36,31 @@ class Cli { }) } - resolvePlugins(): Plugin[] { + async resolvePlugins(): Promise { + async function toPlugin(pluginPkgName: string) { + const [err, apply] = await loadModule(pluginPkgName) + const id = pluginPkgName.replace(/^@xus\/cli-plugin-/, 'built-in:') + if (err) { + error(` + plugin [${id}] load error + `) + return null + } + return { + id, + apply + } + } + const builtInPlugins = [] + const builtInMap = ['@xus/cli-plugin-command-help'] + for (const pkgName in builtInMap) { + const plugin = await toPlugin(pkgName) + if (plugin) { + builtInPlugins.push(plugin) + } + } // TODO: user install plugin - return BuiltInPlugins + return builtInPlugins } async run(commandName: string, args: Args, rawArgs: RawArgs): Promise { diff --git a/packages/cli/src/builtInPlugins/index.ts b/packages/cli/src/builtInPlugins/index.ts deleted file mode 100644 index fe8118a..0000000 --- a/packages/cli/src/builtInPlugins/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import CHelp from './commands/help' - -export const BuiltInPlugins = [ - { - id: 'built-in:commands/help', - apply: CHelp - } -] diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 217c723..34e90c1 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -1,15 +1,3 @@ -#!/usr/bin/env node -import minimist from 'minimist' -import Cli from './Cli' -import { EnvEnum } from './utils/constants' - -// 1. init cli -const cli = new Cli(process.env[EnvEnum.context] || process.cwd()) -// 2. get args -const rawArgs = process.argv.slice(2) -const args = minimist(rawArgs) -const commandName = args._[0] -// 3. run commander -cli.run(commandName, args, rawArgs).catch(() => { - process.exit(1) -}) +export * from './types' +export { IPluginAPI } from './PluginAPI' +export * from './utils' diff --git a/packages/cli/src/manager/ConfigManager.ts b/packages/cli/src/manager/ConfigManager.ts index f0d2706..40511e7 100644 --- a/packages/cli/src/manager/ConfigManager.ts +++ b/packages/cli/src/manager/ConfigManager.ts @@ -1,5 +1,5 @@ import { ProjectConfig } from '../types' -import { loadModule } from '@xus/cli-shared-utils' +import { loadModule } from '../utils' import { IPathManager } from './PathManager' class ConfigManager { diff --git a/packages/cli/src/manager/EnvManager.ts b/packages/cli/src/manager/EnvManager.ts index 083c6dd..b10172c 100644 --- a/packages/cli/src/manager/EnvManager.ts +++ b/packages/cli/src/manager/EnvManager.ts @@ -1,4 +1,4 @@ -import { createEnvName } from '@xus/cli-shared-utils' +import { createEnvName } from '../utils' import { IPathManager } from './PathManager' class EnvManager { diff --git a/packages/cli/src/types/plugins.ts b/packages/cli/src/types/plugins.ts index 226336b..a2cbdf7 100644 --- a/packages/cli/src/types/plugins.ts +++ b/packages/cli/src/types/plugins.ts @@ -2,12 +2,13 @@ import { ProjectConfig } from './config' import { Args, RawArgs } from './args' import { IPluginAPI } from '../PluginAPI' +export type PluginApply = (api: IPluginAPI, projectOps?: ProjectConfig) => void export interface Plugin { id: string - apply: (api: IPluginAPI, projectOps: ProjectConfig) => void + apply: PluginApply } -export type CommandFn = (args: Args, rawArgs?: RawArgs) => any | Promise +export type CommandFn = (args: Args, rawArgs: RawArgs) => any | Promise export interface CommandOps { desc: string usage: string diff --git a/packages/cli-shared-utils/src/env.ts b/packages/cli/src/utils/env.ts similarity index 100% rename from packages/cli-shared-utils/src/env.ts rename to packages/cli/src/utils/env.ts diff --git a/packages/cli-shared-utils/src/index.ts b/packages/cli/src/utils/index.ts similarity index 78% rename from packages/cli-shared-utils/src/index.ts rename to packages/cli/src/utils/index.ts index ed9ad85..71f11bf 100644 --- a/packages/cli-shared-utils/src/index.ts +++ b/packages/cli/src/utils/index.ts @@ -2,3 +2,4 @@ export * from './logger' export * from './module' export * from './validator' export * from './env' +export * from './constants' diff --git a/packages/cli-shared-utils/src/logger.ts b/packages/cli/src/utils/logger.ts similarity index 100% rename from packages/cli-shared-utils/src/logger.ts rename to packages/cli/src/utils/logger.ts diff --git a/packages/cli-shared-utils/src/module.ts b/packages/cli/src/utils/module.ts similarity index 100% rename from packages/cli-shared-utils/src/module.ts rename to packages/cli/src/utils/module.ts diff --git a/packages/cli-shared-utils/src/validator.ts b/packages/cli/src/utils/validator.ts similarity index 100% rename from packages/cli-shared-utils/src/validator.ts rename to packages/cli/src/utils/validator.ts diff --git a/packages/cli/src/xus.ts b/packages/cli/src/xus.ts new file mode 100644 index 0000000..eb1fb71 --- /dev/null +++ b/packages/cli/src/xus.ts @@ -0,0 +1,14 @@ +// export types +import minimist from 'minimist' +import Cli from './Cli' +import { EnvEnum } from './utils/constants' +// 1. init cli +const cli = new Cli(process.env[EnvEnum.context] || process.cwd()) +// 2. get args +const rawArgs = process.argv.slice(2) +const args = minimist(rawArgs) +const commandName = args._[0] +// 3. run commander +cli.run(commandName, args, rawArgs).catch(() => { + process.exit(1) +}) diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json index 9b4c2ad..af74b8a 100644 --- a/packages/cli/tsconfig.json +++ b/packages/cli/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { - "outDir": "./lib", + "outDir": "./dist" }, "extends": "../../tsconfig.json", "include": ["./src/**/*"] -} \ No newline at end of file +}