qdmp-cli 0.0.2 → 0.0.4

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/README.md CHANGED
@@ -20,6 +20,7 @@ npm install -g qdmp-cli
20
20
  ```json
21
21
  {
22
22
  "appId": "your_app_id",
23
+ "devAppId": "your_dev_app_id",
23
24
  }
24
25
  ```
25
26
  ### 初始化项目
@@ -33,12 +34,15 @@ qdmp-cli list
33
34
  ### 登录
34
35
  ```bash
35
36
  qdmp-cli login
37
+ qdmp-cli login -e dev //登录开发环境
36
38
  ```
37
39
  ### 查看当前用户
38
40
  ```bash
39
41
  qdmp-cli getMe
42
+ qdmp-cli getMe -e dev //查看开发环境用户
40
43
  ```
41
44
  ### 上传版本
42
45
  ```bash
43
46
  qdmp-cli upload
47
+ qdmp-cli upload -e dev //上传开发环境
44
48
  ```
package/actions.js CHANGED
@@ -72,10 +72,10 @@ export const listAction = () => {
72
72
  console.log(table.table(tableData));
73
73
  };
74
74
 
75
- export const loginAction = async () => {
75
+ export const loginAction = async (option) => {
76
76
  try {
77
77
  const { account, password } = await inquirerAccountPassword();
78
- const result = await login(account, password);
78
+ const result = await login(account, password, option.env);
79
79
  if (result.success) {
80
80
  success("登录成功");
81
81
  } else {
@@ -85,25 +85,25 @@ export const loginAction = async () => {
85
85
  error(e.message);
86
86
  }
87
87
  };
88
- export const getMyInfoAction = async () => {
88
+ export const getMyInfoAction = async (option) => {
89
89
  try {
90
- const nickname = await getUserInfo();
91
- const appId = await getAppId();
92
- const appInfo = await getAppInfo(appId);
90
+ const nickname = await getUserInfo(option.env);
91
+ const appId = await getAppId(option.env);
92
+ const appInfo = await getAppInfo(appId, option.env);
93
93
  info(`当前用户:${nickname}`);
94
94
  info(`当前授权应用:${appInfo?.name} - ${appId}`);
95
- } catch (error) {
96
- error(error?.message);
95
+ } catch (e) {
96
+ error(e?.message);
97
97
  }
98
98
  };
99
99
 
100
- export async function uploadAction() {
100
+ export async function uploadAction(option) {
101
101
  try {
102
- const appId = await getAppId();
102
+ const appId = await getAppId(option.env);
103
103
  if (!appId) {
104
104
  error("未授权应用,请在根目录下qdmp.json配置对应的appId");
105
105
  }
106
- const remoteApp = await getAppInfo(appId);
106
+ const remoteApp = await getAppInfo(appId, option.env);
107
107
  if (!remoteApp) {
108
108
  error("未找到应用,请检查appId是否正确");
109
109
  }
@@ -128,11 +128,13 @@ export async function uploadAction() {
128
128
  error("上传链接不可用,请检查网络是否正常");
129
129
  }
130
130
  // 更新远端版本信息;
131
- await uploadVersion(appId, url);
131
+ await uploadVersion(appId, url, option.env);
132
132
  // 清理工作文件夹;
133
133
  await cleanWorkSpaceFolder();
134
134
  success(
135
- `上传成功,版本号:${code},可前往官网进行小程序发布:https://mp.qiandao.com`
135
+ `上传成功,版本号:${code},可前往官网进行小程序发布:https://${
136
+ option.env === "prod" ? "" : "dev-"
137
+ }mp.qiandao.com`
136
138
  );
137
139
  } catch (e) {
138
140
  error(`${e.message}`);
package/api.js CHANGED
@@ -3,9 +3,9 @@ import fs from "fs";
3
3
  import { promisify } from "util";
4
4
 
5
5
  const readFile = promisify(fs.readFile);
6
+
6
7
  // API 基础配置
7
8
  const API_CONFIG = {
8
- baseURL: "https://api.qiandao.com",
9
9
  timeout: 10000,
10
10
  headers: {
11
11
  "content-type": "application/json",
@@ -18,13 +18,16 @@ const API_CONFIG = {
18
18
  * @param {object} options - 请求选项
19
19
  * @returns {Promise} 请求结果
20
20
  */
21
- export const request = async (url, options = {}) => {
21
+ export const request = async (url, options = {}, env = "prod") => {
22
22
  const config = {
23
+ baseURL:
24
+ env === "prod"
25
+ ? "https://api.qiandao.com"
26
+ : "https://dev-api.qiandao.com",
23
27
  method: "GET",
24
28
  headers: { ...API_CONFIG.headers },
25
29
  ...options,
26
30
  };
27
-
28
31
  // 添加认证头(如果有 token)
29
32
  const token = getToken();
30
33
  if (token) {
@@ -32,7 +35,7 @@ export const request = async (url, options = {}) => {
32
35
  }
33
36
 
34
37
  try {
35
- const response = await fetch(`${API_CONFIG.baseURL}${url}`, config);
38
+ const response = await fetch(`${config.baseURL}${url}`, config);
36
39
 
37
40
  // 检查响应状态
38
41
  if (!response.ok) {
@@ -55,12 +58,16 @@ export const request = async (url, options = {}) => {
55
58
  * @param {string} password - 密码
56
59
  * @returns {Promise} 登录结果
57
60
  */
58
- export const login = async (username, password) => {
61
+ export const login = async (username, password, env = "prod") => {
59
62
  try {
60
- const result = await request("/mp/v1/user/login", {
61
- method: "POST",
62
- body: JSON.stringify({ username, password }),
63
- });
63
+ const result = await request(
64
+ "/mp/v1/user/login",
65
+ {
66
+ method: "POST",
67
+ body: JSON.stringify({ username, password }),
68
+ },
69
+ env
70
+ );
64
71
  if (result?.data?.token) {
65
72
  saveToken(result.data.token); // 保存token
66
73
  return { success: true };
@@ -75,9 +82,9 @@ export const login = async (username, password) => {
75
82
  * 获取用户信息
76
83
  * @returns {Promise} 用户信息
77
84
  */
78
- export const getUserInfo = async () => {
85
+ export const getUserInfo = async (env = "prod") => {
79
86
  try {
80
- const result = await request("/mp/v1/user/me");
87
+ const result = await request("/mp/v1/user/me", {}, env);
81
88
  return result?.data?.nickname;
82
89
  } catch (error) {
83
90
  throw new Error(error?.message);
@@ -128,9 +135,9 @@ export const uploadApp = async (filename, localPath) => {
128
135
  * 获取app信息
129
136
  * @params {string} appId - appId
130
137
  */
131
- export const getAppInfo = async (appId) => {
138
+ export const getAppInfo = async (appId, env = "prod") => {
132
139
  try {
133
- const result = await request("/mp/v1/lookup/app/" + appId);
140
+ const result = await request("/mp/v1/lookup/app/" + appId, {}, env);
134
141
  return result?.data;
135
142
  } catch (error) {
136
143
  throw new Error(error?.message);
@@ -141,15 +148,19 @@ export const getAppInfo = async (appId) => {
141
148
  * @params {string} appId - appId
142
149
  * @params {string} downloadUrl - 上传链接
143
150
  */
144
- export const uploadVersion = async (appId, downloadUrl) => {
151
+ export const uploadVersion = async (appId, downloadUrl, env = "prod") => {
145
152
  try {
146
- const result = await request("/mp/v1/platform/version/update", {
147
- method: "POST",
148
- body: JSON.stringify({
149
- appId,
150
- downloadUrl,
151
- }),
152
- });
153
+ const result = await request(
154
+ "/mp/v1/platform/version/update",
155
+ {
156
+ method: "POST",
157
+ body: JSON.stringify({
158
+ appId,
159
+ downloadUrl,
160
+ }),
161
+ },
162
+ env
163
+ );
153
164
  return result;
154
165
  } catch (error) {
155
166
  throw new Error(error?.message);
package/index.js CHANGED
@@ -40,10 +40,19 @@ program
40
40
  .action(initAction);
41
41
 
42
42
  program.command("list").description("列出可选模版").action(listAction);
43
- program.command("login").description("登录").action(loginAction);
43
+ program
44
+ .command("login")
45
+ .description("登录")
46
+ .option("-e, --env <env>", "当前环境")
47
+ .action(loginAction);
44
48
  program
45
49
  .command("getMe")
46
- .description("查看当前登陆用户")
50
+ .description("查看登录用户")
51
+ .option("-e, --env <env>", "当前环境")
47
52
  .action(getMyInfoAction);
48
- program.command("upload").description("上传项目").action(uploadAction);
53
+ program
54
+ .command("upload")
55
+ .description("上传项目")
56
+ .option("-e, --env <env>", "当前环境")
57
+ .action(uploadAction);
49
58
  program.parse(process.argv);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qdmp-cli",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "qdmp-cli",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -11,7 +11,10 @@
11
11
  "qdmp": "./index.js",
12
12
  "qdmp-cli": "./index.js"
13
13
  },
14
- "keywords": [],
14
+ "keywords": [
15
+ "千岛小程序",
16
+ "千岛小程序脚手架"
17
+ ],
15
18
  "author": "zhangyanran",
16
19
  "license": "ISC",
17
20
  "dependencies": {
package/utils/common.js CHANGED
@@ -17,12 +17,12 @@ export const getUploadPath = (appId, code) => {
17
17
  *
18
18
  * @returns appId
19
19
  */
20
- export function getAppId() {
20
+ export function getAppId(env = "prod") {
21
21
  try {
22
22
  const qdmpJsonPath = `${process.cwd()}/qdmp.json`;
23
23
  const data = fs.readFileSync(path.resolve(qdmpJsonPath), "utf8");
24
24
  const qdmpJson = JSON.parse(data);
25
- return qdmpJson?.appId || "";
25
+ return env === "prod" ? qdmpJson?.appId || "" : qdmpJson?.devAppId || "";
26
26
  } catch (e) {
27
27
  error("未授权应用,请在根目录下qdmp.json配置对应的appId");
28
28
  }
@@ -47,7 +47,7 @@ export const isUrlAccessible = async (url) => {
47
47
  */
48
48
  export async function renameDistFolder(dirname, newname) {
49
49
  try {
50
- execSync(`rm -rf ./h5`, { stdio: "inherit" });
50
+ if (fs.existsSync(newname)) return true;
51
51
  execSync(`mv ${dirname} ${newname}`, { stdio: "inherit" });
52
52
  return true;
53
53
  } catch (e) {
@@ -89,7 +89,14 @@ async function compressProject(output, dirname = "") {
89
89
  */
90
90
  async function copyDistFolder(dirname) {
91
91
  try {
92
- execSync(`cp -r ${dirname} ./${WORKSPACE_DIR}`, {
92
+ const indexPath = execSync(`find ${dirname} -name index.html -print -quit`)
93
+ .toString()
94
+ .trim();
95
+ if (!indexPath) {
96
+ throw new Error("未找到index.html文件");
97
+ }
98
+ const parentDir = path.dirname(indexPath);
99
+ execSync(`cp -r ${parentDir} ./${WORKSPACE_DIR}`, {
93
100
  stdio: "inherit",
94
101
  });
95
102
  return true;