@liuli-util/cli 3.16.0 → 3.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/LICENSE +21 -0
- package/dist/bin.js +69 -69
- package/dist/bin.js.map +2 -2
- package/dist/commands/deploy/DeployService.d.ts +1 -0
- package/dist/commands/deploy/DeployService.d.ts.map +1 -1
- package/dist/commands/deploy/index.d.ts.map +1 -1
- package/package.json +73 -72
- package/src/commands/deploy/DeployService.ts +25 -8
- package/src/commands/deploy/__tests__/simpleGit.test.ts +5 -0
- package/src/commands/deploy/index.ts +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeployService.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy/DeployService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAe,MAAM,oBAAoB,CAAA;AACjE,OAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"DeployService.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy/DeployService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAe,MAAM,oBAAoB,CAAA;AACjE,OAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAUzD,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAgBD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IACpD;;OAEG;IACH,MAAM,IAAI,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;CAC9C;AAED,oBAAY,cAAc;IACxB,OAAO,aAAa;IACpB,IAAI,SAAS;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,OAAO,CAAA;IACd,IAAI,EAAE,cAAc,CAAA;CACrB;AAED,oBAAY,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG;IAChE,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,cAAc,CAAA;CAC1B,CAAA;AAED;;GAEG;AACH,qBAAa,iBAAkB,YAAW,cAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,iBAAiB;IAEvD,MAAM,IAAI,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC;IAc7C,QAAQ,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;CAqBrD;AAED,oBAAY,oBAAoB,GAAG,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG;IACnE,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED;;GAEG;AACH,qBAAa,oBAAqB,YAAW,cAAc;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,oBAAoB;IAE1D,MAAM,IAAI,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC;IAgD7C,QAAQ,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC;CAclD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/deploy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAInC,eAAO,MAAM,aAAa,SAG0E,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,72 +1,73 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@liuli-util/cli",
|
|
3
|
-
"version": "3.
|
|
4
|
-
"description": "一个针对于库和 CLI 应用程序打包的零配置 CLI",
|
|
5
|
-
"main": "dist/index.js",
|
|
6
|
-
"module": "dist/index.esm.js",
|
|
7
|
-
"types": "dist/index.d.ts",
|
|
8
|
-
"license": "MIT",
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
"
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
},
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
"@types/
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
}
|
|
72
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@liuli-util/cli",
|
|
3
|
+
"version": "3.17.0",
|
|
4
|
+
"description": "一个针对于库和 CLI 应用程序打包的零配置 CLI",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"module": "dist/index.esm.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"bin": {
|
|
10
|
+
"liuli-cli": "./bin.js"
|
|
11
|
+
},
|
|
12
|
+
"jest": {
|
|
13
|
+
"preset": "ts-jest",
|
|
14
|
+
"moduleNameMapper": {
|
|
15
|
+
"lodash-es": "lodash"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"access": "public",
|
|
20
|
+
"registry": "https://registry.npmjs.org/"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@liuli-util/commitlint-standard-config": "^0.1.6",
|
|
24
|
+
"@liuli-util/eslint-config-react-ts": "^0.1.0",
|
|
25
|
+
"@liuli-util/eslint-config-ts": "^0.2.0",
|
|
26
|
+
"@liuli-util/prettier-standard-config": "^0.1.0",
|
|
27
|
+
"ajv": "^8.8.2",
|
|
28
|
+
"ajv-i18n": "^4.2.0",
|
|
29
|
+
"chokidar": "^3.5.2",
|
|
30
|
+
"commander": "^8.2.0",
|
|
31
|
+
"conf": "^10.1.1",
|
|
32
|
+
"enquirer": "^2.3.6",
|
|
33
|
+
"esbuild": "^0.13.2",
|
|
34
|
+
"fs-extra": "^10.0.0",
|
|
35
|
+
"glob": "^7.2.0",
|
|
36
|
+
"glob-promise": "^4.2.0",
|
|
37
|
+
"json5": "^2.2.0",
|
|
38
|
+
"lodash-es": "^4.17.21",
|
|
39
|
+
"simple-git": "^2.45.1",
|
|
40
|
+
"spinnies": "^0.5.1",
|
|
41
|
+
"ssh2": "^1.5.0",
|
|
42
|
+
"ssh2-sftp-client": "^7.2.1",
|
|
43
|
+
"ts-morph": "^12.0.0"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@types/find-cache-dir": "^3.2.1",
|
|
47
|
+
"@types/fs-extra": "^9.0.13",
|
|
48
|
+
"@types/glob": "^7",
|
|
49
|
+
"@types/jest": "^27.0.2",
|
|
50
|
+
"@types/lodash-es": "^4.17.5",
|
|
51
|
+
"@types/node": "^16.9.6",
|
|
52
|
+
"@types/ssh2-sftp-client": "^7.0.0",
|
|
53
|
+
"comlink": "^4.3.1",
|
|
54
|
+
"esno": "^0.9.1",
|
|
55
|
+
"jest": "^27.2.1",
|
|
56
|
+
"lodash": "^4.17.21",
|
|
57
|
+
"rimraf": "^3.0.2",
|
|
58
|
+
"ts-jest": "^27.0.5",
|
|
59
|
+
"type-fest": "^2.3.4",
|
|
60
|
+
"typescript": "^4.4.3"
|
|
61
|
+
},
|
|
62
|
+
"repository": {
|
|
63
|
+
"type": "git",
|
|
64
|
+
"url": "https://github.com/rxliuli/liuli-tools/tree/master/apps/liuli-cli"
|
|
65
|
+
},
|
|
66
|
+
"scripts": {
|
|
67
|
+
"setup": "pnpm build",
|
|
68
|
+
"build": "rimraf dist && pnpm start build cli",
|
|
69
|
+
"dev": "esno src/bin.ts build cli -w",
|
|
70
|
+
"start": "esno src/bin.ts"
|
|
71
|
+
},
|
|
72
|
+
"readme": "# @liuli-util/cli\r\n\r\n一个针对于库和 CLI 应用程序打包的零配置 CLI。\r\n\r\n## 起步\r\n\r\n### 安装\r\n\r\n```sh\r\nyarn add -D @liuli-util/cli # 局部安装\r\nnpm i -g @liuli-util/cli # 全局安装\r\n```\r\n\r\n### 打包\r\n\r\n```sh\r\nyarn liuli-cli build lib # 打包库\r\nyarn liuli-cli build cli # 打包 cli 引用程序\r\n```\r\n\r\n> 添加 `-w` 选项则启动 rollup 的监视模式,打包出来的 dist/ 不会压缩且不会将依赖项打进 bundle。\r\n\r\n\r\n\r\n### 生成\r\n\r\n```sh\r\nyarn liuli-cli generate <name> --template lib # 生成 ts-lib 项目\r\nyarn liuli-cli generate <name> --template cli # 生成 cli 项目\r\n```\r\n\r\nutil 也支持交互式的创建项目\r\n\r\n```shell\r\nyarn liuli-cli generate\r\n```\r\n\r\n\r\n\r\n### 同步配置\r\n\r\n```shell\r\nyarn liuli-cli sync\r\n```\r\n\r\n需要在 package.json 中指定同步哪些配置\r\n\r\n```json\r\n{\r\n \"sync\": [\"prettier\", \"workspaces\", \"commitlint\", \"simplehooks\"]\r\n}\r\n```\r\n\r\n目前支持的配置项\r\n\r\n- prettier\r\n- commitlint\r\n- simplehooks\r\n- workspaces\r\n- gitignore\r\n- eslint-ts\r\n- eslint-vue-ts\r\n- jest\r\n\r\n未来的目标:默认将包括检查 cli 自身的同步(如果需要在 monorepo 之外使用的话),eslint/style-lint 之类,还有在没有配置时实现交互式 cli\r\n\r\n> 注:目前仅同步依赖而不会执行安装\r\n\r\n也支持交互式的初始化同步配置\r\n\r\n```shell\r\nyarn liuli-cli sync init\r\n```\r\n\r\n## 设计理念\r\n\r\n- 约定大于配置,如果可能应该不提供配置。VitePress 也是这样做的,参考:https://vitepress.vuejs.org/#lighter-page-weight 这会导致一些约束,包括以下内容\r\n - 打包库时入口文件必须是 `src/index.ts`,出口文件则是 `dist/index.esm.js` 与 `dist/index.js`\r\n - 打包 CLI 时入口文件必须是 `src/bin.ts`,出口文件则是 `dist/bin.js`\r\n - 在打包 lib 时会将所有的依赖作为外部依赖处理,而在打包 cli 时会将所有依赖项打进 bundle\r\n\r\n## FAQ\r\n\r\n### 为什么底层没有选择 esbuild\r\n\r\n事实上,esbuild 本身非常非常非常快(重要的事情说三遍),但如果使用 js 封装 CLI,则性能会迅速降低。\r\n\r\n打包这个项目使用 esbuild、cli 封装、rollup 的时间对比如下\r\n\r\n| 打包方式 | 时间 |\r\n| -------- | ----- |\r\n| esbuild | 0.49s |\r\n| cli 封装 | 3.2s |\r\n| rollup | 3.65s |\r\n\r\n> 现在 [vscode 插件打包官方推荐使用 esbuild](https://code.visualstudio.com/api/working-with-extensions/bundling-extension) ,吾辈在生产项目中也有过实践,长期而言吾辈比较看好这类更高性能的打包工具。\r\n\r\n### 为什么不捆绑外部依赖项\r\n\r\n主要原因是希望将捆绑的工作交由最终应用完成,避免重复捆绑相同的依赖,而且还可以避免处理 nodejs 中直接基于文件系统使用 `worker_threads` 的问题。\r\n"
|
|
73
|
+
}
|
|
@@ -7,6 +7,7 @@ import Ajv from 'ajv'
|
|
|
7
7
|
import localize from 'ajv-i18n/localize'
|
|
8
8
|
import simpleGit from 'simple-git'
|
|
9
9
|
import { nodeCacheDir } from '../../utils/nodeCacheDir'
|
|
10
|
+
import { performance, PerformanceObserver } from 'perf_hooks'
|
|
10
11
|
|
|
11
12
|
export interface DeployEvents {
|
|
12
13
|
process(title: string): void
|
|
@@ -44,6 +45,7 @@ export enum DeployTypeEnum {
|
|
|
44
45
|
|
|
45
46
|
export interface BaseDeployOptions {
|
|
46
47
|
cwd: string
|
|
48
|
+
debug: boolean
|
|
47
49
|
type: DeployTypeEnum
|
|
48
50
|
}
|
|
49
51
|
|
|
@@ -111,9 +113,20 @@ export class GhPagesDeployService implements IDeployService {
|
|
|
111
113
|
const defaultRemote = 'origin'
|
|
112
114
|
const defaultBranch = 'gh-pages'
|
|
113
115
|
return PromiseUtil.wrapOnEvent(async (events: DeployEvents) => {
|
|
114
|
-
|
|
116
|
+
const obs = new PerformanceObserver((perfObserverList, observer) => {
|
|
117
|
+
if (this.options.debug) {
|
|
118
|
+
console.log(perfObserverList.getEntries())
|
|
119
|
+
}
|
|
120
|
+
})
|
|
121
|
+
obs.observe({ type: 'mark' })
|
|
122
|
+
|
|
123
|
+
function mark(title: string) {
|
|
124
|
+
performance.mark(title)
|
|
125
|
+
events.process(title)
|
|
126
|
+
}
|
|
127
|
+
mark('开始推送')
|
|
115
128
|
const git = simpleGit(this.options.cwd)
|
|
116
|
-
|
|
129
|
+
mark('获取当前项目的远端配置')
|
|
117
130
|
const originRemote = (await git.getRemotes(true)).find((item) => item.name === defaultRemote)
|
|
118
131
|
if (!originRemote) {
|
|
119
132
|
throw new Error('当前目录不是一个 git 项目或没有配置 git remote')
|
|
@@ -122,21 +135,25 @@ export class GhPagesDeployService implements IDeployService {
|
|
|
122
135
|
const originRepoName = originRemote.refs.fetch.replace(new RegExp('[/:]', 'g'), '_')
|
|
123
136
|
const localRepoPath = path.resolve(ghPagesRoot, originRepoName)
|
|
124
137
|
if (!(await pathExists(localRepoPath))) {
|
|
125
|
-
|
|
138
|
+
mark('克隆项目')
|
|
126
139
|
await git.clone(originRemote.refs.fetch, localRepoPath, { '--branch': defaultBranch })
|
|
127
140
|
} else {
|
|
141
|
+
mark('更新项目')
|
|
128
142
|
await git.pull()
|
|
129
143
|
}
|
|
130
|
-
|
|
144
|
+
mark('复制文件')
|
|
131
145
|
const remoteDestPath = path.join(localRepoPath, this.options.remote)
|
|
132
146
|
await mkdirp(remoteDestPath)
|
|
133
147
|
await copy(path.resolve(this.options.cwd, this.options.dest), remoteDestPath)
|
|
134
|
-
|
|
148
|
+
mark('推送到远端')
|
|
135
149
|
await git.cwd(localRepoPath)
|
|
136
150
|
await git.add('-A')
|
|
137
|
-
await git.
|
|
138
|
-
|
|
139
|
-
|
|
151
|
+
if ((await git.status()).files.length !== 0) {
|
|
152
|
+
await git.commit('Updates gh-pages by liuli-cli')
|
|
153
|
+
await git.push(defaultRemote, defaultBranch)
|
|
154
|
+
}
|
|
155
|
+
mark('完成推送')
|
|
156
|
+
obs.disconnect()
|
|
140
157
|
})
|
|
141
158
|
}
|
|
142
159
|
|
|
@@ -26,4 +26,9 @@ describe('测试 simple-git', () => {
|
|
|
26
26
|
const originRepoName = originRemote.refs.fetch.replace(new RegExp('[/:]', 'g'), '_')
|
|
27
27
|
await git.clone(originRemote.refs.fetch, path.resolve(tempPath, originRepoName), { '--branch': 'gh-pages' })
|
|
28
28
|
}, 100_000)
|
|
29
|
+
it('测试 git status', async () => {
|
|
30
|
+
await git.add('-A')
|
|
31
|
+
const status = await git.status()
|
|
32
|
+
console.log('status: ', status.files)
|
|
33
|
+
})
|
|
29
34
|
})
|
|
@@ -4,4 +4,5 @@ import * as path from 'path'
|
|
|
4
4
|
|
|
5
5
|
export const deployCommand = new Command('deploy')
|
|
6
6
|
.description('部署项目到远端')
|
|
7
|
-
.
|
|
7
|
+
.option('--debug', '是否开启调试模式')
|
|
8
|
+
.action((options: { debug?: boolean }) => deploy({ cwd: path.resolve(), debug: !!options.debug }))
|