cloudcc-cli 1.5.6 → 1.5.7

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.
Files changed (49) hide show
  1. package/README.md +9 -0
  2. package/bin/cc.js +44 -0
  3. package/bin/plugin.js +7 -0
  4. package/bin/project.js +7 -0
  5. package/cloudcc-cli/accessToken +1 -0
  6. package/package.json +6 -12
  7. package/src/classes/create.js +43 -0
  8. package/src/classes/index.js +8 -0
  9. package/src/classes/publish.js +47 -0
  10. package/src/plugin/create.js +80 -0
  11. package/src/plugin/index.js +8 -0
  12. package/src/{builderPlugin.js → plugin/publish.js} +2 -3
  13. package/src/{creatorTemProject.js → project/create.js} +14 -18
  14. package/template/demojava +15 -0
  15. package/template/index.js +19 -7
  16. package/template/javaconfigjson +3 -0
  17. package/utils/checkVersion.js +1 -1
  18. package/utils/http.js +24 -1
  19. package/utils/utils.js +45 -0
  20. package/bin/build.js +0 -7
  21. package/bin/buildccbasesdk.js +0 -7
  22. package/bin/buildccsdk.js +0 -7
  23. package/bin/buildtag.js +0 -7
  24. package/bin/create.js +0 -7
  25. package/bin/createPlugin.js +0 -7
  26. package/bin/publish.js +0 -7
  27. package/bin/publishBuild.js +0 -7
  28. package/bin/publishh5.js +0 -7
  29. package/bin/publishh5Build.js +0 -7
  30. package/src/buildTag.js +0 -75
  31. package/src/builderBaseSDK.js +0 -90
  32. package/src/builderCreate.js +0 -84
  33. package/src/builderSDK.js +0 -162
  34. package/src/publishProject.js +0 -221
  35. package/src/publishProjectBuild.js +0 -223
  36. package/src/publishProjectH5.js +0 -218
  37. package/src/publishProjectH5Build.js +0 -224
  38. package/utils/askTool.js +0 -96
  39. package/utils/changeVersion copy.js +0 -75
  40. package/utils/changeVersion.js +0 -24
  41. package/utils/deploy.js +0 -9
  42. package/utils/encryption.js +0 -20
  43. package/utils/github-markdown.min.css +0 -2
  44. package/utils/md2html.js +0 -89
  45. package/utils/notifyIM.js +0 -87
  46. package/utils/pushCode.js +0 -202
  47. package/utils/trigger.js +0 -23
  48. package/utils/updatei18n.js +0 -127
  49. package/utils/writeVersion.js +0 -56
package/src/buildTag.js DELETED
@@ -1,75 +0,0 @@
1
- // 同步执行exe命令
2
- const exec = require('child_process').execSync;
3
- // 文件管理器
4
- const fs = require('fs');
5
- // 控制台输出样式控件
6
- const chalk = require("chalk")
7
- // 检查版本更新
8
- const { checkUpdate } = require("../utils/checkVersion")
9
- // 配置信息
10
- const projectConfig = JSON.parse(fs.readFileSync('package.json', 'utf8'))
11
- // 控制台交互
12
- const { askTag } = require("../utils/askTool")
13
- // 通知IM
14
- const { notifyDingDing } = require("../utils/NotifyIM")
15
- /**
16
- * 打包基础SDK,并发布到NPM
17
- */
18
- class Builder {
19
- constructor() {
20
- this.user = exec("git config user.name").toString("utf8").trim();
21
- }
22
- async init() {
23
- let res = await checkUpdate();
24
- if (!res) {
25
- let toTag = await askTag('请选择要创建的Tag:');
26
- let fromTag = await askTag('基于哪个Tag创建:');
27
- if (toTag.type == fromTag.type) {
28
- console.log()
29
- console.log(chalk.red("无法创建Tag:\n\n" + "from:" + fromTag.type + "\n" + "to:" + toTag.type))
30
- console.log()
31
- } else {
32
- if (this.setTag(toTag.type, fromTag.type)) {
33
- let version = exec(`git log ${fromTag.type} -1 --oneline`).toString("utf-8").split(" ")[1];
34
- notifyDingDing(toTag.type, version, projectConfig, this.user)
35
- }
36
-
37
- }
38
- }
39
- }
40
- /**
41
- * 设置Tags
42
- */
43
- setTag(toTag, fromTag) {
44
- console.log(chalk.green('开始创建Tag,请稍后...'));
45
- try {
46
- // 更新tag
47
- exec("git fetch --tags -f")
48
- } catch (error) {
49
- return false;
50
- }
51
-
52
- try {
53
- // 删除本地Tag
54
- exec("git tag -d " + toTag)
55
- } catch (error) {
56
- }
57
-
58
- try {
59
- // 删除远程Tag
60
- exec("git push origin :refs/tags/" + toTag)
61
- } catch (error) {
62
- }
63
-
64
- // 添加tag
65
- exec("git tag " + toTag + " " + fromTag + " -f")
66
-
67
- // 推送tag
68
- exec("git push --tags")
69
-
70
- console.log(chalk.green('Tag设置成功!'));
71
- console.log();
72
- return true;
73
- }
74
- }
75
- module.exports = Builder;
@@ -1,90 +0,0 @@
1
- // 同步执行exe命令
2
- const exec = require('child_process').execSync;
3
- // 文件管理器
4
- const fs = require('fs');
5
- // 控制台输出样式控件
6
- const chalk = require("chalk")
7
- // 检查版本更新
8
- const { checkUpdate } = require("../utils/checkVersion")
9
- // 配置信息
10
- const projectConfig = JSON.parse(fs.readFileSync('package.json', 'utf8'))
11
- // 控制台交互
12
- const { askType, askTypeOther } = require("../utils/askTool")
13
- // 提交代码,设置Tag
14
- const { getNewVersionName, pushCodeAndTags } = require("../utils/pushCode")
15
- // 通知飞书
16
- const { notifyDingDing } = require("../utils/NotifyIM")
17
- // 网络请求
18
- const { postParams } = require("../utils/http")
19
- /**
20
- * 打包基础SDK,并发布到NPM
21
- */
22
- class Builder {
23
- constructor() {
24
- }
25
- async init() {
26
- let res = await checkUpdate();
27
- if (!res) {
28
- let condition = await askType();
29
- if ("other" == condition.type) {
30
- condition = await askTypeOther();
31
- }
32
- let version = getNewVersionName([condition.type])
33
- if (condition && condition.type) {
34
- if (this.buildpush2npm(version[0].split("V")[1])) {
35
- pushCodeAndTags([condition.type])
36
- // notifyFeishu(condition.type, version, projectConfig);
37
- notifyDingDing(condition.type, version, projectConfig);
38
- console.log(chalk.green('发布完成'));
39
- }
40
- } else {
41
- console.log();
42
- console.log(chalk.red("请至少设置一个有效的Tag"));
43
- console.log();
44
- }
45
- }
46
- }
47
- /**
48
- * 打包并发布到npm
49
- * @returns null
50
- */
51
- buildpush2npm(version) {
52
- try {
53
- // 设置package.json版本号
54
- projectConfig.version = version;
55
- fs.writeFileSync('package.json', JSON.stringify(projectConfig), 'utf8')
56
- } catch (e) {
57
- console.log(e);
58
- }
59
- try {
60
- console.log()
61
- console.log(chalk.green("开始编译,请稍后..."));
62
- exec('npm run build');
63
- console.log()
64
- console.log(chalk.green("编译完成"));
65
- } catch (error) {
66
- console.log();
67
- console.log(chalk.red('编译失败:' + error));
68
- return false;
69
- }
70
- try {
71
- console.log()
72
- console.log(chalk.green("NPM开始发布,请稍后..."));
73
- exec(`npm publish --registry https://registry.npmjs.org`)
74
- try {
75
- postParams(`https://npm.taobao.org/sync/${projectConfig.name}`)
76
- } catch (error) {
77
-
78
- }
79
- console.log()
80
- console.log(chalk.green("NPM发布完成"));
81
- return true
82
- } catch (error) {
83
- console.log();
84
- console.log(chalk.red('NPM发布失败:' + error));
85
- return false
86
- }
87
- }
88
-
89
- }
90
- module.exports = Builder;
@@ -1,84 +0,0 @@
1
- const fs = require('fs');
2
- const path = require("path")
3
- const chalk = require("chalk")
4
- const inquirer = require("inquirer")
5
- // 检查cli版本更新功能
6
- const { checkUpdate } = require("../utils/checkVersion")
7
- const BaseUrl = "https://developer.apis.cloudcc.cn"
8
- const axios = require("axios")
9
- const temp = `<template>
10
- <div class="cc-container">
11
- <div>Hello CloudCC</div>
12
- <div>
13
- <a href="https://cloudccone.feishu.cn/wiki/JZ7CwcRfriU8taknCKCcwKEmncd">
14
- 开发者文档</a
15
- >
16
- </div>
17
- </div>
18
- </template>
19
-
20
- <script>
21
- export default {
22
- data() {
23
- return {
24
- componentInfo: {
25
- // 组件唯一标识,全局唯一
26
- component: "cloudcc-demo-01",
27
- // 组件名称,在页面编辑器显示的名字
28
- compName: "cloudcc-demo-01",
29
- // 组件描述信息
30
- compDesc: "组件描述信息",
31
- },
32
- isLock: false,
33
- };
34
- },
35
- };
36
- </script>
37
- <style lang="scss" scoped>
38
- .cc-container {
39
- text-align: center;
40
- padding: 8px;
41
- background: goldenrod;
42
- }
43
- </style>`
44
- /**
45
- * 创建组件模板文件
46
- */
47
- class Builder {
48
- constructor() {
49
- this.options = {
50
- // 开发配置信息
51
- devConsoleConfig: {
52
- },
53
- }
54
- this.plugin = process.argv.splice(2)[0]
55
- }
56
- async init() {
57
- let res = await checkUpdate();
58
- if (!res) {
59
- // 获得用户输入
60
- let answers;
61
- if (this.plugin) {
62
- answers = { buildFileName: this.plugin + "/demo.vue" }
63
- } else {
64
- answers = await this.ask();
65
- answers.buildFileName = "./plugin/" + answers.buildFileName
66
- }
67
- fs.writeFileSync(answers.buildFileName, temp);
68
- }
69
- }
70
- /**
71
- * 命令行交互
72
- * @returns 结果
73
- */
74
- ask() {
75
- const prompt = [];
76
- prompt.push({
77
- type: "input",
78
- name: "buildFileName",
79
- message: "请输入文件名,如index.vue",
80
- })
81
- return inquirer.prompt(prompt)
82
- }
83
- }
84
- module.exports = Builder;
package/src/builderSDK.js DELETED
@@ -1,162 +0,0 @@
1
- const { execSync } = require('child_process');
2
- const { post } = require('../utils/http');
3
- const fs = require('fs');
4
- const path = require("path")
5
- const chalk = require("chalk")
6
- const inquirer = require("inquirer")
7
- const { checkUpdate } = require("../utils/checkVersion")
8
- const BaseUrl = "https://developer.apis.cloudcc.cn"
9
- /**
10
- * 打包业务sdk为js并发布到cdn
11
- */
12
- class Builder {
13
- constructor() {
14
- this.options = {
15
- // 开发配置信息
16
- devConsoleConfig: {
17
- },
18
- }
19
- }
20
- async init() {
21
- let res = await checkUpdate();
22
- if (!res) {
23
- this.options.devConsoleConfig = this.getPackageJson();
24
- // 获得用户输入
25
- let answers = await this.ask();
26
- if (answers.types.length == 0) {
27
- console.log();
28
- console.error(chalk.red(`请选择一个有效的发布版本!`));
29
- console.log();
30
- return;
31
- }
32
- // 获得vue内容
33
- let obj = this.getSDKName(answers.buildDirName);
34
- obj.type = answers.types;
35
- this.build(obj) && this.upload(obj);
36
- }
37
- }
38
- /**
39
- * 命令行交互
40
- * @returns 结果
41
- */
42
- ask() {
43
- const prompt = [{
44
- type: 'list',
45
- message: '请选择发布版本:',
46
- name: 'types',
47
- choices: [
48
- { name: "客户环境-Release", value: "release" },
49
- { name: "公司环境-GA", value: "ga" },
50
- { name: "uat环境-Beta", value: "beta" },
51
- { name: "测试环境-Dev", value: "dev" },
52
- ],
53
- }, {
54
- type: "input",
55
- name: "buildDirName",
56
- message: "请输入需要编译的目录名称,如Detail:",
57
- }];
58
- return inquirer.prompt(prompt)
59
- }
60
- /**
61
- * 获得用户信息
62
- * @returns 配置信息
63
- */
64
- getPackageJson() {
65
- const packageJson = JSON.parse(fs.readFileSync("package.json", 'utf8'));
66
- return packageJson.devConsoleConfig; // cloudcc-plugin 中的 devConsoleConfig
67
- }
68
- /**
69
- * 请求用户token
70
- * @param {用户信息} devConsoleConfig
71
- * @returns token
72
- */
73
- async getToken(devConsoleConfig) {
74
- let res = await post(this.options.devConsoleConfig.baseUrl || BaseUrl + "/sysconfig/auth/pc/1.0/post/tokenInfo", devConsoleConfig);
75
- if (res.returnCode == 200) {
76
- return res.data.accessToken;
77
- } else {
78
- console.error(chalk.red(`登录失败`, JSON.stringify(res)));
79
- return null;
80
- }
81
- }
82
- /**
83
- * 获得sdk名字
84
- */
85
- getSDKName(buildFileName) {
86
- let vueContent = fs.readFileSync(path.join("packages", buildFileName, "src", "index.vue"), 'utf8');
87
-
88
- let sdkName = "cc-" + vueContent.split("\"cc-")[1].split("\"")[0]
89
-
90
- return { sdkName, path: path.join("packages", buildFileName) }
91
- };
92
- /**
93
- * 编译文件,将vue编译为js文件
94
- * @param {编译对象信息} obj
95
- */
96
- build(obj) {
97
- try {
98
- console.log(chalk.green('编译中,请稍后...'));
99
- console.log()
100
- execSync(`npx vue-cli-service build --target lib --name ${obj.sdkName} --dest ${path.join(obj.path, "lib")} ${path.join(obj.path, "index.js")}`);
101
- console.log(chalk.green('编译成功!'));
102
- console.log()
103
- return true
104
- } catch (e) {
105
- console.log(chalk.red("编译失败:", e.toString("utf8").trim()));
106
- console.log()
107
- return false;
108
- }
109
- }
110
- /**
111
- * 将文件上传
112
- */
113
- async upload(obj) {
114
- console.log(chalk.green('发布中,请稍后...'));
115
- console.log()
116
- let jsContent = "";
117
- try {
118
- jsContent = fs.readFileSync(path.join(obj.path, "lib", obj.sdkName + ".umd.min.js"), 'utf8')
119
- } catch (err) {
120
- console.error(err)
121
- }
122
- let body = {
123
- fileInfo: []
124
- };
125
- body.fileInfo.push(
126
- {
127
- "fileName": obj.type + "/" + obj.sdkName + ".umd.min.js",
128
- "fileContent": jsContent,
129
- "bucketName": "cloudcc-sdk",
130
- }
131
- )
132
- let res = await post(this.options.devConsoleConfig.baseUrl || BaseUrl + "/devconsole/cdn/uploadFile",
133
- body);
134
- if (res.returnCode == 200) {
135
- console.error(chalk.green(`发布成功!`));
136
- console.log();
137
- } else {
138
- console.error(chalk.red(`发布失败: ${res.returnInfo}`));
139
- console.log();
140
- }
141
-
142
- return res;
143
- }
144
-
145
- /**
146
- * 过滤出min.js文件
147
- * @returns 过滤结果
148
- */
149
- filterFile() {
150
- const jsPath = "build";
151
- let jsPaths = [];
152
- if (jsPath) {
153
- jsPaths = fs.readdirSync(jsPath).filter((f) => {
154
- return f.endsWith('umd.min.js');
155
- }).map((item) => {
156
- return path.join(jsPath, item);
157
- });
158
- }
159
- return jsPaths;
160
- }
161
- }
162
- module.exports = Builder;
@@ -1,221 +0,0 @@
1
- const { execSync, exec } = require('child_process');
2
- const chalk = require("chalk")
3
- // 文件编辑对象
4
- const fs = require("fs")
5
- // 配置信息
6
- const projectConfig = JSON.parse(fs.readFileSync('package.json', 'utf8'))
7
- // 网页转换器
8
- const { change } = require("../utils/md2html")
9
- // 检查版本更新
10
- const { checkUpdate } = require("../utils/checkVersion")
11
- // 控制台交互
12
- const { askType, askTypeOther, askBuildType } = require("../utils/askTool")
13
- // 提交代码,设置Tag
14
- const { getNewVersionName, pushCodeAndTags } = require("../utils/pushCode")
15
- // 触发构建器
16
- const { jenkins } = require("../utils/trigger")
17
- // 通知飞书
18
- const { notifyDingDing } = require("../utils/notifyIM")
19
- // 时间库
20
- const dayjs = require("dayjs")
21
- // 多语言更新脚本
22
- const { updatei18n, askI18n } = require("../utils/updatei18n")
23
- // 部署脚本
24
- const { deploy } = require("../utils/deploy")
25
- // 创建版本信息
26
- const { writeVersion } = require("../utils/writeVersion")
27
- /**
28
- * 项目打包发布脚本
29
- */
30
- class Publish {
31
- constructor() {
32
- /**
33
- * 控制台参数:key=value
34
- * type:发布的tag
35
- * branch:使用的分支
36
- * language:是否更新多语言,'1'更新,'0'不更新
37
- * buildType:打包方式,online-云打包,local-本地打包
38
- * user:打包用户
39
- * update:代码不同步的时候,是否强制更新代码
40
- */
41
- this.args = new Map();
42
- this.arguments = process.argv.splice(2).map((item) => {
43
- let arr = item.split("=");
44
- this.args.set(arr[0], arr[1]);
45
- });
46
- this.user = this.args.get("user") || execSync("git config user.name").toString("utf8").trim();
47
- }
48
- /**
49
- * 初始化
50
- */
51
- async init() {
52
- // 检查cli版本,提示用户更新:false:不更新,true:更新
53
- let update = await checkUpdate();
54
- if (!update) {
55
- // 1:版本发布信息,包含发布版本类型信息
56
- let condition = {};
57
- // 检查命令行是否输入了发布版本信息,如果没有包含,那么询问发布类型
58
- if (this.args.get("type")) {
59
- condition.type = this.args.get("type")
60
- } else {
61
- // 询问发布类型
62
- condition = await askType();
63
- if ("other" == condition.type) {
64
- condition = await askTypeOther();
65
- }
66
- }
67
-
68
- // 1.1:询问打包方式
69
- let buildType = null;
70
- if (this.args.get("buildType")) {
71
- buildType = this.args.get("buildType")
72
- } else {
73
- buildType = await askBuildType();
74
- }
75
- if ("online" == buildType.buildType) {
76
- deploy(projectConfig.config["deploy-" + condition.type] + "," + encodeURI(this.user))
77
- console.log(chalk.green("云发布已开始,请稍后查看通知"))
78
- return
79
- }
80
- // 2:如果命令行包含了分支信息,那么git切换到命令行的分支
81
- if (this.args.get("branch")) {
82
- execSync(`git checkout ${this.args.get("branch")}`);
83
- console.log(chalk.green("切换分支:" + this.args.get("branch")))
84
- console.log()
85
- }
86
-
87
- // 3:如果存在多语言配置,则更新多语言
88
- if (projectConfig.config && projectConfig.config["language-config"]) {
89
- // 获得命令行多语言参数
90
- let i18n = this.args.get("language")
91
- // 如果存在命令行参数,那么获取,否则询问
92
- if (!i18n) {
93
- i18n = await askI18n()
94
- }
95
- // 如果选择为1,那么下载多语言
96
- if ('1' === i18n || '1' === i18n.checked) {
97
- let laguage = projectConfig.config["language-config"]
98
- // 执行更新多语言文件
99
- await updatei18n(laguage)
100
- console.log(chalk.blue("多语言文件更新完毕,准备开始打包"));
101
- console.log();
102
- }
103
- }
104
- // 4:开始打包
105
- this.build(condition)
106
- }
107
- }
108
-
109
- /**
110
- * 编译代码
111
- * @param {发布类型} types:Dev,uat,RC
112
- * @returns
113
- */
114
- build(condition) {
115
- console.log(chalk.green('开始编译,请稍后...'));
116
- console.log();
117
- // 5:获取新的发布版本号
118
- let version = getNewVersionName([condition.type])
119
- // 5.1:将版本信息写入env文件中,公其他业务使用
120
- try {
121
- fs.writeFileSync(".env.production", "VUE_APP_PROJECT_VERSION = " + condition.type + "-" + version, 'utf-8')
122
- } catch (error) {
123
- }
124
- let that = this;
125
- // 打包命令
126
- exec('npm run build', (error, stdout, stderr) => {
127
- if (error) {
128
- exec('npx vue-cli-service build', (error, stdout, stderr) => {
129
- if (error) {
130
- console.log('编译失败:', error);
131
- console.log(chalk.red('编译失败:' + stdout));
132
- } else {
133
- console.log(chalk.green('编译成功!'));
134
- console.log();
135
- that.buildSucess(condition, version);
136
- }
137
- })
138
- } else {
139
- console.log(chalk.green('编译成功!'));
140
- console.log();
141
- that.buildSucess(condition, version);
142
- }
143
- })
144
-
145
- }
146
- /**
147
- * 编译成功回调
148
- */
149
- buildSucess(condition, version) {
150
- // 5.2:更新日志文档添加发布日期
151
- // 获得分支信息
152
- let branch = execSync('git branch --show-current');
153
- branch = branch.toString("utf8").trim();
154
- const datas = fs.readFileSync("README.md", 'utf-8').split("\n")
155
- let data = ""
156
- datas.map((item, index) => {
157
- if (0 == index) {
158
- data = data + `#### 发布版本:${version}` + "\n"
159
- data = data + `#### 发布时间:${dayjs().format('YYYY-MM-DD HH:mm:ss')}` + "\n"
160
- data = data + `#### 发布人员:${this.user}` + "\n"
161
- data = data + `#### 发布分支:${branch}` + "\n"
162
- data = data + `#### 发布标签:${condition.type}` + "\n"
163
- if (!item.startsWith("#### 发布版本")) {
164
- data = data + item + "\n"
165
- }
166
- } else if (1 == index) {
167
- if (!item.startsWith("#### 发布时间")) {
168
- data = data + item + "\n"
169
- }
170
- } else if (2 == index) {
171
- if (!item.startsWith("#### 发布人员")) {
172
- data = data + item + "\n"
173
- }
174
- } else if (3 == index) {
175
- if (!item.startsWith("#### 发布分支")) {
176
- data = data + item + "\n"
177
- }
178
- } else if (4 == index) {
179
- if (!item.startsWith("#### 发布标签")) {
180
- data = data + item + "\n"
181
- }
182
- } else {
183
- data = data + item + "\n"
184
- }
185
- })
186
- fs.writeFileSync("README.md", data)
187
- // 6:将readme生成为html,并复制到dist中
188
- let outPath = "dist"
189
- // 读取配置,是否改变了输出路径
190
- if (projectConfig.config && projectConfig.config["doc-path"]) {
191
- outPath = projectConfig.config["doc-path"];
192
- }
193
- try {
194
- // 设置readme文件位置
195
- change("README", outPath, "README");
196
- } catch (error) {
197
- console.log(chalk.red("README写入异常:" + error))
198
- }
199
- try {
200
- // 7:写入版本信息
201
- writeVersion(version, condition.type, projectConfig, this.user);
202
- } catch (error) {
203
- console.log(chalk.red("版本信息写入异常:" + error))
204
- }
205
- // 8:发布代码并设置tags,触发发布,飞书提醒
206
- if (pushCodeAndTags(version, [condition.type], this.args.get("update"))) {
207
- if (projectConfig && projectConfig.config) {
208
- jenkins(projectConfig.config["jenkins-" + condition.type])
209
- }
210
- // notifyFeishu(condition.type, version, projectConfig, this.user)
211
- notifyDingDing(condition.type, version, projectConfig, this.user)
212
- console.log();
213
- console.log(chalk.green('发布完成'));
214
- console.log();
215
- }
216
- }
217
- }
218
-
219
- module.exports = Publish;
220
-
221
-