neo-cmp-cli 1.7.7 → 1.7.9

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
@@ -128,7 +128,7 @@ neo push cmp
128
128
 
129
129
  ### 方式一:OAuth2 登录授权(推荐)
130
130
 
131
- OAuth2 授权码模式更加安全可靠,且支持 token 自动刷新。
131
+ OAuth2 授权码模式更加安全可靠,无需用户配置账户名和密码。
132
132
 
133
133
  #### 使用步骤
134
134
 
@@ -139,9 +139,9 @@ OAuth2 授权码模式更加安全可靠,且支持 token 自动刷新。
139
139
 
140
140
  执行流程:
141
141
  - 自动打开浏览器访问授权页面
142
- - 在浏览器中输入 NeoCRM 账号密码进行登录
143
- - 授权成功后自动跳转回本地
144
- - Token 自动保存到项目的 `.neo-cli/token.json` 文件中
142
+ - 在浏览器中输入 NeoCRM 账号密码进行登录(需选择对应的租户)
143
+ - 授权成功后自动跳转回本地(附带 code)
144
+ - cli 端 通过 code 获取 Token,并自动保存到项目的 `.neo-cli/token.json` 文件中
145
145
 
146
146
  2. **登出 NeoCRM 平台**
147
147
  ```bash
@@ -179,16 +179,8 @@ A: 命令行会输出授权 URL,手动复制到浏览器中打开即可。
179
179
  **Q2: Token 刷新失败怎么办?**
180
180
  A: 如果 refresh_token 也过期(默认 30 天),需要重新执行 `neo login`。同时检查网络连接是否正常。
181
181
 
182
- #### OAuth2 模式 vs 密码模式
183
-
184
- | 特性 | OAuth2 授权码模式 | 密码模式 |
185
- |------|------------------|---------|
186
- | 安全性 | ✅ 高(无需在配置文件中存储密码) | ⚠️ 较低(需要配置密码和安全令牌) |
187
- | Token 刷新 | ✅ 自动刷新 | ✅ 自动刷新 |
188
- | 有效期 | 2 小时(可自动刷新) | 2 小时(可自动刷新) |
189
- | 推荐程度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
190
-
191
- > **建议**:优先使用 OAuth2 授权码模式(`neo login`),更加安全便捷。
182
+ **Q3: 授权登录后没有正常跳回 redirect_uri**
183
+ A: 可能被浏览器安装的插件影响,目前已知会影响授权登录的浏览器插件有:Neo UI Extension,请关闭插件后重试。
192
184
 
193
185
  ### 方式二:密码授权配置
194
186
 
@@ -225,6 +217,15 @@ module.exports = {
225
217
  - 按照文档说明获取 8 位安全令牌
226
218
  - `password` 字段 = 用户账户密码 + 8 位安全令牌(直接拼接,无空格或分隔符)
227
219
 
220
+ ### OAuth2 模式 vs 密码模式
221
+
222
+ | 特性 | OAuth2 授权码模式 | 密码模式 |
223
+ |------|------------------|---------|
224
+ | 安全性 | ✅ 高(无需在配置文件中存储密码) | ⚠️ 较低(需要配置密码和安全令牌) |
225
+ | Token 刷新 | ✅ 自动刷新 | ✅ 自动刷新 |
226
+ | 有效期 | 2 小时(可自动刷新) | 永不过期 |
227
+ | 推荐程度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
228
+
228
229
  ---
229
230
 
230
231
  ## 📖 开发指南
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo-cmp-cli",
3
- "version": "1.7.7",
3
+ "version": "1.7.9",
4
4
  "description": "前端脚手架:自定义组件开发工具,支持react 和 vue2.0技术栈。",
5
5
  "keywords": [
6
6
  "neo-cli",
@@ -1,7 +1,7 @@
1
1
  const curConfig = require('../config/index'); // 获取当前项目根目录下的配置文件
2
2
 
3
3
  const neoConfig = curConfig.neoConfig || {};
4
- const authConfig = neoConfig.auth || {};
4
+ // const authConfig = neoConfig.auth || {};
5
5
 
6
6
  // NeoCRM 跨 Pod 授权配置
7
7
  module.exports = {
@@ -14,12 +14,14 @@ module.exports = {
14
14
  },
15
15
  // 获取 授权码 相关配置
16
16
  response_type: 'code', // 认证类型;此参数值必须为 code
17
- client_id: authConfig.client_id || '04c8b45c4dbe36426a660bf70d3fe3e7', // 客户端 ID,跨 Pod 级链接器【内置】
17
+ // client_id: authConfig.client_id || '04c8b45c4dbe36426a660bf70d3fe3e7', // 客户端 ID,跨 Pod 级链接器【内置】
18
+ client_id: '04c8b45c4dbe36426a660bf70d3fe3e7', // 客户端 ID,跨 Pod 级链接器【内置】
18
19
  scope: 'all', // 固定值:all
19
20
  oauthType: 'standard', // 固定值:standard
20
21
  access_type: 'offline', // 此参数值为 online 时,不产生 refresh_token ;此参数值为 offline 时,返回refresh_token
21
22
 
22
23
  // 获取 令牌 相关配置
23
- client_secret: authConfig.client_secret || '370817d1336a3737f95c671eea39a23b', // 客户端秘钥,跨 Pod 级链接器【内置】
24
+ // client_secret: authConfig.client_secret || '370817d1336a3737f95c671eea39a23b', // 客户端秘钥,跨 Pod 级链接器【内置】
25
+ client_secret: '370817d1336a3737f95c671eea39a23b', // 客户端秘钥,跨 Pod 级链接器【内置】
24
26
  grant_type: 'authorization_code' // 授权类型;此参数值必须为 authorization_code
25
27
  };
@@ -144,52 +144,13 @@ class NeoLoginService {
144
144
  /**
145
145
  * 打开浏览器访问授权 URL
146
146
  * @param {string} authUrl 授权 URL
147
- * @param {boolean} incognito 是否使用无痕模式,默认为 true
148
147
  */
149
- async openBrowser(authUrl, incognito = true) {
148
+ async openBrowser(authUrl) {
150
149
  try {
151
- const options = {};
152
-
153
- if (incognito) {
154
- const platform = process.platform;
155
-
156
- // 根据不同平台和浏览器设置无痕模式参数
157
- if (platform === 'darwin') {
158
- // macOS: 优先使用 Chrome,其次 Safari
159
- options.app = {
160
- name: 'google chrome',
161
- arguments: ['--incognito']
162
- };
163
- } else if (platform === 'win32') {
164
- // Windows: 优先使用 Chrome,其次 Edge
165
- options.app = {
166
- name: 'chrome',
167
- arguments: ['--incognito']
168
- };
169
- } else {
170
- // Linux 或其他平台
171
- options.app = {
172
- name: 'google-chrome',
173
- arguments: ['--incognito']
174
- };
175
- }
176
- }
177
-
178
- await open(authUrl, options);
150
+ await open(authUrl);
179
151
  } catch (error) {
180
- // 如果指定的浏览器打开失败,尝试使用默认浏览器
181
- if (incognito && error.message && error.message.includes('spawn')) {
182
- try {
183
- console.log('无法使用无痕模式打开指定浏览器,尝试使用默认浏览器...');
184
- await open(authUrl);
185
- } catch (fallbackError) {
186
- errorLog(`无法自动打开浏览器: ${fallbackError.message}`);
187
- console.log(`\n请手动访问以下 URL 进行授权:\n${authUrl}\n`);
188
- }
189
- } else {
190
- errorLog(`无法自动打开浏览器: ${error.message}`);
191
- console.log(`\n请手动访问以下 URL 进行授权:\n${authUrl}\n`);
192
- }
152
+ errorLog(`无法自动打开浏览器: ${error.message}`);
153
+ console.log(`\n请手动访问以下 URL 进行授权:\n${authUrl}\n`);
193
154
  }
194
155
  }
195
156
 
@@ -271,11 +232,31 @@ class NeoLoginService {
271
232
  res.writeHead(400, { 'Content-Type': 'text/html; charset=utf-8' });
272
233
  res.end(`
273
234
  <html>
274
- <head><title>授权失败</title></head>
235
+ <head>
236
+ <title>授权失败</title>
237
+ <style>
238
+ .container {
239
+ margin: 30px auto;
240
+ padding-top: 30px;
241
+ text-align: center;
242
+
243
+ .error-title {
244
+ color: red;
245
+ }
246
+
247
+ h1, p {
248
+ text-align: center;
249
+ margin-top: 10px;
250
+ }
251
+ }
252
+ </style>
253
+ </head>
275
254
  <body>
276
- <h1>授权失败</h1>
277
- <p>错误信息: ${error}</p>
278
- <p>您可以关闭此窗口</p>
255
+ <div class="container">
256
+ <h1 class="error-title">授权失败</h1>
257
+ <img src="https://custom-widgets.bj.bcebos.com/neocrmlogin.png" alt="授权失败" />
258
+ <p>错误信息: ${error}</p>
259
+ </div>
279
260
  </body>
280
261
  </html>
281
262
  `);
@@ -291,7 +272,7 @@ class NeoLoginService {
291
272
  <head>
292
273
  <title>授权成功</title>
293
274
  <style>
294
- container {
275
+ .container {
295
276
  margin: 30px auto;
296
277
  padding-top: 30px;
297
278
  text-align: center;
@@ -43,12 +43,75 @@ $ npm run linkDebug
43
43
  $ npm run pushCmp
44
44
  ```
45
45
 
46
- ##### 需自行添加 NeoCRM 授权配置
46
+ ### 🔐 授权配置
47
+
48
+ 使用 `neo push cmp`、`neo pull cmp`、`neo delete cmp` 等命令与 NeoCRM 平台交互时,需要配置授权信息。
49
+
50
+ #### 方式一:OAuth2 登录授权(推荐)
51
+
52
+ OAuth2 授权码模式更加安全可靠,无需用户配置账户名和密码。
53
+
54
+ ##### 使用步骤
55
+
56
+ 1. **登录 NeoCRM 平台**
57
+ ```bash
58
+ neo login
59
+ ```
60
+
61
+ 执行流程:
62
+ - 自动打开浏览器访问授权页面
63
+ - 在浏览器中输入 NeoCRM 账号密码进行登录(需选择对应的租户)
64
+ - 授权成功后自动跳转回本地(附带 code)
65
+ - cli 端 通过 code 获取 Token,并自动保存到项目的 `.neo-cli/token.json` 文件中
66
+
67
+ 2. **登出 NeoCRM 平台**
68
+ ```bash
69
+ neo logout
70
+ ```
71
+
72
+ 功能:清除本地保存的 token 文件,下次使用需要重新登录。
73
+
74
+ ##### 配置示例
75
+
76
+ ```javascript
77
+ // neo.config.js
78
+ module.exports = {
79
+ neoConfig: {
80
+ neoBaseURL: 'https://crm-cd.xiaoshouyi.com', // 平台根地址(默认:https://crm.xiaoshouyi.com)
81
+ // 登录授权 URL(用于获取 code)
82
+ loginURL: 'https://login-cd.xiaoshouyi.com/auc/oauth2/auth',
83
+ tokenAPI: 'https://login-cd.xiaoshouyi.com/auc/oauth2/token', // Token 获取接口地址
84
+ },
85
+ }
86
+ ```
87
+
88
+ ##### Token 有效期
89
+
90
+ - **access_token**:默认有效期 2 小时
91
+ - **refresh_token**:默认有效期 30 天
92
+ - 系统会在 access_token 过期前 5 分钟自动刷新
93
+ - 如果 refresh_token 也过期,需要重新执行 `neo login`
94
+
95
+ ##### 常见问题
96
+
97
+ **Q1: 浏览器无法自动打开怎么办?**
98
+ A: 命令行会输出授权 URL,手动复制到浏览器中打开即可。
99
+
100
+ **Q2: Token 刷新失败怎么办?**
101
+ A: 如果 refresh_token 也过期(默认 30 天),需要重新执行 `neo login`。同时检查网络连接是否正常。
102
+
103
+ **Q3: 授权登录后没有正常跳回 redirect_uri**
104
+ A: 可能被浏览器安装的插件影响,目前已知会影响授权登录的浏览器插件有:Neo UI Extension,请关闭插件后重试。
105
+
106
+ #### 方式二:密码授权配置
107
+
108
+ 在项目根目录的 `neo.config.js` 文件中添加 NeoCRM 平台授权配置:
109
+
47
110
  ```javascript
48
111
  module.exports = {
49
112
  neoConfig: {
50
113
  neoBaseURL: 'https://crm-cd.xiaoshouyi.com', // 平台根地址(默认:https://crm.xiaoshouyi.com)
51
- tokenAPI: 'https://login-cd.xiaoshouyi.com/auc/oauth2/token', // Token 获取接口地址(默认:https://login.xiaoshouyi.com/auc/oauth2/token)
114
+ tokenAPI: 'https://login-cd.xiaoshouyi.com/auc/oauth2/token', // Token 获取接口地址
52
115
  // NeoCRM 授权配置
53
116
  auth: {
54
117
  client_id: 'xx', // 客户端 ID,从创建连接器的客户端信息中获取(Client_Id)
@@ -63,9 +126,28 @@ module.exports = {
63
126
  },
64
127
  }
65
128
  ```
66
- 1、客户端 ID 和 客户端秘钥 需通过 创建连接器 获取,获取方式见:[https://doc.xiaoshouyi.com](https://doc.xiaoshouyi.com) / 创建连接器;
67
- 2、如何获取 安全令牌 见:[https://doc.xiaoshouyi.com](https://doc.xiaoshouyi.com) / OAuth安全认证 / 密码模式 / 获取令牌;
68
- 3、发布成功后即可在 NeoCRM 对应租户环境的页面设计器和表单设计器中使用此自定义组件。
129
+
130
+ ##### 授权配置获取方式
131
+
132
+ 1. **客户端 ID 和客户端秘钥**:需通过创建连接器获取
133
+ - 访问 [销售易文档中心](https://doc.xiaoshouyi.com) / 创建连接器
134
+ - 创建连接器后,从客户端信息中获取 `Client_Id` 和 `Client_Secret`
135
+
136
+ 2. **安全令牌**:如何获取安全令牌
137
+ - 访问 [销售易文档中心](https://doc.xiaoshouyi.com) / OAuth安全认证 / 密码模式 / 获取令牌
138
+ - 按照文档说明获取 8 位安全令牌
139
+ - `password` 字段 = 用户账户密码 + 8 位安全令牌(直接拼接,无空格或分隔符)
140
+
141
+ #### OAuth2 模式 vs 密码模式
142
+
143
+ | 特性 | OAuth2 授权码模式 | 密码模式 |
144
+ |------|------------------|---------|
145
+ | 安全性 | ✅ 高(无需在配置文件中存储密码) | ⚠️ 较低(需要配置密码和安全令牌) |
146
+ | Token 刷新 | ✅ 自动刷新 | ✅ 自动刷新 |
147
+ | 有效期 | 2 小时(可自动刷新) | 永不过期 |
148
+ | 推荐程度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
149
+
150
+ ---
69
151
 
70
152
  ### 配置项说明(neo-cmp-cli)
71
- [请查看neo-cmp-cli](https://github.com/wibetter/neo-cmp-cli)
153
+ [请查看neo-cmp-cli](https://www.npmjs.com/package/neo-cmp-cli)
@@ -87,12 +87,76 @@ $ npm run linkDebug
87
87
  $ npm run pushCmp
88
88
  ```
89
89
 
90
- ##### 需自行添加 NeoCRM 授权配置
90
+
91
+ ### 🔐 授权配置
92
+
93
+ 使用 `neo push cmp`、`neo pull cmp`、`neo delete cmp` 等命令与 NeoCRM 平台交互时,需要配置授权信息。
94
+
95
+ #### 方式一:OAuth2 登录授权(推荐)
96
+
97
+ OAuth2 授权码模式更加安全可靠,无需用户配置账户名和密码。
98
+
99
+ ##### 使用步骤
100
+
101
+ 1. **登录 NeoCRM 平台**
102
+ ```bash
103
+ neo login
104
+ ```
105
+
106
+ 执行流程:
107
+ - 自动打开浏览器访问授权页面
108
+ - 在浏览器中输入 NeoCRM 账号密码进行登录(需选择对应的租户)
109
+ - 授权成功后自动跳转回本地(附带 code)
110
+ - cli 端 通过 code 获取 Token,并自动保存到项目的 `.neo-cli/token.json` 文件中
111
+
112
+ 2. **登出 NeoCRM 平台**
113
+ ```bash
114
+ neo logout
115
+ ```
116
+
117
+ 功能:清除本地保存的 token 文件,下次使用需要重新登录。
118
+
119
+ ##### 配置示例
120
+
91
121
  ```javascript
122
+ // neo.config.js
92
123
  module.exports = {
93
124
  neoConfig: {
94
125
  neoBaseURL: 'https://crm-cd.xiaoshouyi.com', // 平台根地址(默认:https://crm.xiaoshouyi.com)
95
- tokenAPI: 'https://login-cd.xiaoshouyi.com/auc/oauth2/token', // Token 获取接口地址(默认:https://login.xiaoshouyi.com/auc/oauth2/token
126
+ // 登录授权 URL(用于获取 code
127
+ loginURL: 'https://login-cd.xiaoshouyi.com/auc/oauth2/auth',
128
+ tokenAPI: 'https://login-cd.xiaoshouyi.com/auc/oauth2/token', // Token 获取接口地址
129
+ },
130
+ }
131
+ ```
132
+
133
+ ##### Token 有效期
134
+
135
+ - **access_token**:默认有效期 2 小时
136
+ - **refresh_token**:默认有效期 30 天
137
+ - 系统会在 access_token 过期前 5 分钟自动刷新
138
+ - 如果 refresh_token 也过期,需要重新执行 `neo login`
139
+
140
+ ##### 常见问题
141
+
142
+ **Q1: 浏览器无法自动打开怎么办?**
143
+ A: 命令行会输出授权 URL,手动复制到浏览器中打开即可。
144
+
145
+ **Q2: Token 刷新失败怎么办?**
146
+ A: 如果 refresh_token 也过期(默认 30 天),需要重新执行 `neo login`。同时检查网络连接是否正常。
147
+
148
+ **Q3: 授权登录后没有正常跳回 redirect_uri**
149
+ A: 可能被浏览器安装的插件影响,目前已知会影响授权登录的浏览器插件有:Neo UI Extension,请关闭插件后重试。
150
+
151
+ #### 方式二:密码授权配置
152
+
153
+ 在项目根目录的 `neo.config.js` 文件中添加 NeoCRM 平台授权配置:
154
+
155
+ ```javascript
156
+ module.exports = {
157
+ neoConfig: {
158
+ neoBaseURL: 'https://crm-cd.xiaoshouyi.com', // 平台根地址(默认:https://crm.xiaoshouyi.com)
159
+ tokenAPI: 'https://login-cd.xiaoshouyi.com/auc/oauth2/token', // Token 获取接口地址
96
160
  // NeoCRM 授权配置
97
161
  auth: {
98
162
  client_id: 'xx', // 客户端 ID,从创建连接器的客户端信息中获取(Client_Id)
@@ -107,9 +171,28 @@ module.exports = {
107
171
  },
108
172
  }
109
173
  ```
110
- 1、客户端 ID 和 客户端秘钥 需通过 创建连接器 获取,获取方式见:[https://doc.xiaoshouyi.com](https://doc.xiaoshouyi.com) / 创建连接器;
111
- 2、如何获取 安全令牌 见:[https://doc.xiaoshouyi.com](https://doc.xiaoshouyi.com) / OAuth安全认证 / 密码模式 / 获取令牌;
112
- 3、发布成功后即可在 NeoCRM 对应租户环境的页面设计器和表单设计器中使用此自定义组件。
174
+
175
+ ##### 授权配置获取方式
176
+
177
+ 1. **客户端 ID 和客户端秘钥**:需通过创建连接器获取
178
+ - 访问 [销售易文档中心](https://doc.xiaoshouyi.com) / 创建连接器
179
+ - 创建连接器后,从客户端信息中获取 `Client_Id` 和 `Client_Secret`
180
+
181
+ 2. **安全令牌**:如何获取安全令牌
182
+ - 访问 [销售易文档中心](https://doc.xiaoshouyi.com) / OAuth安全认证 / 密码模式 / 获取令牌
183
+ - 按照文档说明获取 8 位安全令牌
184
+ - `password` 字段 = 用户账户密码 + 8 位安全令牌(直接拼接,无空格或分隔符)
185
+
186
+ #### OAuth2 模式 vs 密码模式
187
+
188
+ | 特性 | OAuth2 授权码模式 | 密码模式 |
189
+ |------|------------------|---------|
190
+ | 安全性 | ✅ 高(无需在配置文件中存储密码) | ⚠️ 较低(需要配置密码和安全令牌) |
191
+ | Token 刷新 | ✅ 自动刷新 | ✅ 自动刷新 |
192
+ | 有效期 | 2 小时(可自动刷新) | 永不过期 |
193
+ | 推荐程度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
194
+
195
+ ---
113
196
 
114
197
  ### 配置项说明(neo-cmp-cli)
115
- [请查看neo-cmp-cli](https://github.com/wibetter/neo-cmp-cli)
198
+ [请查看neo-cmp-cli](https://www.npmjs.com/package/neo-cmp-cli)
@@ -43,12 +43,76 @@ $ npm run linkDebug
43
43
  $ npm run pushCmp
44
44
  ```
45
45
 
46
- ##### 需自行添加 NeoCRM 授权配置
46
+
47
+ ### 🔐 授权配置
48
+
49
+ 使用 `neo push cmp`、`neo pull cmp`、`neo delete cmp` 等命令与 NeoCRM 平台交互时,需要配置授权信息。
50
+
51
+ #### 方式一:OAuth2 登录授权(推荐)
52
+
53
+ OAuth2 授权码模式更加安全可靠,无需用户配置账户名和密码。
54
+
55
+ ##### 使用步骤
56
+
57
+ 1. **登录 NeoCRM 平台**
58
+ ```bash
59
+ neo login
60
+ ```
61
+
62
+ 执行流程:
63
+ - 自动打开浏览器访问授权页面
64
+ - 在浏览器中输入 NeoCRM 账号密码进行登录(需选择对应的租户)
65
+ - 授权成功后自动跳转回本地(附带 code)
66
+ - cli 端 通过 code 获取 Token,并自动保存到项目的 `.neo-cli/token.json` 文件中
67
+
68
+ 2. **登出 NeoCRM 平台**
69
+ ```bash
70
+ neo logout
71
+ ```
72
+
73
+ 功能:清除本地保存的 token 文件,下次使用需要重新登录。
74
+
75
+ ##### 配置示例
76
+
47
77
  ```javascript
78
+ // neo.config.js
48
79
  module.exports = {
49
80
  neoConfig: {
50
81
  neoBaseURL: 'https://crm-cd.xiaoshouyi.com', // 平台根地址(默认:https://crm.xiaoshouyi.com)
51
- tokenAPI: 'https://login-cd.xiaoshouyi.com/auc/oauth2/token', // Token 获取接口地址(默认:https://login.xiaoshouyi.com/auc/oauth2/token
82
+ // 登录授权 URL(用于获取 code
83
+ loginURL: 'https://login-cd.xiaoshouyi.com/auc/oauth2/auth',
84
+ tokenAPI: 'https://login-cd.xiaoshouyi.com/auc/oauth2/token', // Token 获取接口地址
85
+ },
86
+ }
87
+ ```
88
+
89
+ ##### Token 有效期
90
+
91
+ - **access_token**:默认有效期 2 小时
92
+ - **refresh_token**:默认有效期 30 天
93
+ - 系统会在 access_token 过期前 5 分钟自动刷新
94
+ - 如果 refresh_token 也过期,需要重新执行 `neo login`
95
+
96
+ ##### 常见问题
97
+
98
+ **Q1: 浏览器无法自动打开怎么办?**
99
+ A: 命令行会输出授权 URL,手动复制到浏览器中打开即可。
100
+
101
+ **Q2: Token 刷新失败怎么办?**
102
+ A: 如果 refresh_token 也过期(默认 30 天),需要重新执行 `neo login`。同时检查网络连接是否正常。
103
+
104
+ **Q3: 授权登录后没有正常跳回 redirect_uri**
105
+ A: 可能被浏览器安装的插件影响,目前已知会影响授权登录的浏览器插件有:Neo UI Extension,请关闭插件后重试。
106
+
107
+ #### 方式二:密码授权配置
108
+
109
+ 在项目根目录的 `neo.config.js` 文件中添加 NeoCRM 平台授权配置:
110
+
111
+ ```javascript
112
+ module.exports = {
113
+ neoConfig: {
114
+ neoBaseURL: 'https://crm-cd.xiaoshouyi.com', // 平台根地址(默认:https://crm.xiaoshouyi.com)
115
+ tokenAPI: 'https://login-cd.xiaoshouyi.com/auc/oauth2/token', // Token 获取接口地址
52
116
  // NeoCRM 授权配置
53
117
  auth: {
54
118
  client_id: 'xx', // 客户端 ID,从创建连接器的客户端信息中获取(Client_Id)
@@ -63,9 +127,28 @@ module.exports = {
63
127
  },
64
128
  }
65
129
  ```
66
- 1、客户端 ID 和 客户端秘钥 需通过 创建连接器 获取,获取方式见:[https://doc.xiaoshouyi.com](https://doc.xiaoshouyi.com) / 创建连接器;
67
- 2、如何获取 安全令牌 见:[https://doc.xiaoshouyi.com](https://doc.xiaoshouyi.com) / OAuth安全认证 / 密码模式 / 获取令牌;
68
- 3、发布成功后即可在 NeoCRM 对应租户环境的页面设计器和表单设计器中使用此自定义组件。
130
+
131
+ ##### 授权配置获取方式
132
+
133
+ 1. **客户端 ID 和客户端秘钥**:需通过创建连接器获取
134
+ - 访问 [销售易文档中心](https://doc.xiaoshouyi.com) / 创建连接器
135
+ - 创建连接器后,从客户端信息中获取 `Client_Id` 和 `Client_Secret`
136
+
137
+ 2. **安全令牌**:如何获取安全令牌
138
+ - 访问 [销售易文档中心](https://doc.xiaoshouyi.com) / OAuth安全认证 / 密码模式 / 获取令牌
139
+ - 按照文档说明获取 8 位安全令牌
140
+ - `password` 字段 = 用户账户密码 + 8 位安全令牌(直接拼接,无空格或分隔符)
141
+
142
+ #### OAuth2 模式 vs 密码模式
143
+
144
+ | 特性 | OAuth2 授权码模式 | 密码模式 |
145
+ |------|------------------|---------|
146
+ | 安全性 | ✅ 高(无需在配置文件中存储密码) | ⚠️ 较低(需要配置密码和安全令牌) |
147
+ | Token 刷新 | ✅ 自动刷新 | ✅ 自动刷新 |
148
+ | 有效期 | 2 小时(可自动刷新) | 永不过期 |
149
+ | 推荐程度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
150
+
151
+ ---
69
152
 
70
153
  ### 配置项说明(neo-cmp-cli)
71
- [请查看neo-cmp-cli](https://github.com/wibetter/neo-cmp-cli)
154
+ [请查看neo-cmp-cli](https://www.npmjs.com/package/neo-cmp-cli)
@@ -44,12 +44,76 @@ $ npm run linkDebug
44
44
  $ npm run pushCmp
45
45
  ```
46
46
 
47
- ##### 需自行添加 NeoCRM 授权配置
47
+
48
+ ### 🔐 授权配置
49
+
50
+ 使用 `neo push cmp`、`neo pull cmp`、`neo delete cmp` 等命令与 NeoCRM 平台交互时,需要配置授权信息。
51
+
52
+ #### 方式一:OAuth2 登录授权(推荐)
53
+
54
+ OAuth2 授权码模式更加安全可靠,无需用户配置账户名和密码。
55
+
56
+ ##### 使用步骤
57
+
58
+ 1. **登录 NeoCRM 平台**
59
+ ```bash
60
+ neo login
61
+ ```
62
+
63
+ 执行流程:
64
+ - 自动打开浏览器访问授权页面
65
+ - 在浏览器中输入 NeoCRM 账号密码进行登录(需选择对应的租户)
66
+ - 授权成功后自动跳转回本地(附带 code)
67
+ - cli 端 通过 code 获取 Token,并自动保存到项目的 `.neo-cli/token.json` 文件中
68
+
69
+ 2. **登出 NeoCRM 平台**
70
+ ```bash
71
+ neo logout
72
+ ```
73
+
74
+ 功能:清除本地保存的 token 文件,下次使用需要重新登录。
75
+
76
+ ##### 配置示例
77
+
48
78
  ```javascript
79
+ // neo.config.js
49
80
  module.exports = {
50
81
  neoConfig: {
51
82
  neoBaseURL: 'https://crm-cd.xiaoshouyi.com', // 平台根地址(默认:https://crm.xiaoshouyi.com)
52
- tokenAPI: 'https://login-cd.xiaoshouyi.com/auc/oauth2/token', // Token 获取接口地址(默认:https://login.xiaoshouyi.com/auc/oauth2/token
83
+ // 登录授权 URL(用于获取 code
84
+ loginURL: 'https://login-cd.xiaoshouyi.com/auc/oauth2/auth',
85
+ tokenAPI: 'https://login-cd.xiaoshouyi.com/auc/oauth2/token', // Token 获取接口地址
86
+ },
87
+ }
88
+ ```
89
+
90
+ ##### Token 有效期
91
+
92
+ - **access_token**:默认有效期 2 小时
93
+ - **refresh_token**:默认有效期 30 天
94
+ - 系统会在 access_token 过期前 5 分钟自动刷新
95
+ - 如果 refresh_token 也过期,需要重新执行 `neo login`
96
+
97
+ ##### 常见问题
98
+
99
+ **Q1: 浏览器无法自动打开怎么办?**
100
+ A: 命令行会输出授权 URL,手动复制到浏览器中打开即可。
101
+
102
+ **Q2: Token 刷新失败怎么办?**
103
+ A: 如果 refresh_token 也过期(默认 30 天),需要重新执行 `neo login`。同时检查网络连接是否正常。
104
+
105
+ **Q3: 授权登录后没有正常跳回 redirect_uri**
106
+ A: 可能被浏览器安装的插件影响,目前已知会影响授权登录的浏览器插件有:Neo UI Extension,请关闭插件后重试。
107
+
108
+ #### 方式二:密码授权配置
109
+
110
+ 在项目根目录的 `neo.config.js` 文件中添加 NeoCRM 平台授权配置:
111
+
112
+ ```javascript
113
+ module.exports = {
114
+ neoConfig: {
115
+ neoBaseURL: 'https://crm-cd.xiaoshouyi.com', // 平台根地址(默认:https://crm.xiaoshouyi.com)
116
+ tokenAPI: 'https://login-cd.xiaoshouyi.com/auc/oauth2/token', // Token 获取接口地址
53
117
  // NeoCRM 授权配置
54
118
  auth: {
55
119
  client_id: 'xx', // 客户端 ID,从创建连接器的客户端信息中获取(Client_Id)
@@ -64,9 +128,28 @@ module.exports = {
64
128
  },
65
129
  }
66
130
  ```
67
- 1、客户端 ID 和 客户端秘钥 需通过 创建连接器 获取,获取方式见:[https://doc.xiaoshouyi.com](https://doc.xiaoshouyi.com) / 创建连接器;
68
- 2、如何获取 安全令牌 见:[https://doc.xiaoshouyi.com](https://doc.xiaoshouyi.com) / OAuth安全认证 / 密码模式 / 获取令牌;
69
- 3、发布成功后即可在 NeoCRM 对应租户环境的页面设计器和表单设计器中使用此自定义组件。
70
131
 
71
- ### 前端工程配置项说明(neo-cmp-cli)
72
- [请查看neo-cmp-cli](https://github.com/wibetter/neo-cmp-cli)
132
+ ##### 授权配置获取方式
133
+
134
+ 1. **客户端 ID 和客户端秘钥**:需通过创建连接器获取
135
+ - 访问 [销售易文档中心](https://doc.xiaoshouyi.com) / 创建连接器
136
+ - 创建连接器后,从客户端信息中获取 `Client_Id` 和 `Client_Secret`
137
+
138
+ 2. **安全令牌**:如何获取安全令牌
139
+ - 访问 [销售易文档中心](https://doc.xiaoshouyi.com) / OAuth安全认证 / 密码模式 / 获取令牌
140
+ - 按照文档说明获取 8 位安全令牌
141
+ - `password` 字段 = 用户账户密码 + 8 位安全令牌(直接拼接,无空格或分隔符)
142
+
143
+ #### OAuth2 模式 vs 密码模式
144
+
145
+ | 特性 | OAuth2 授权码模式 | 密码模式 |
146
+ |------|------------------|---------|
147
+ | 安全性 | ✅ 高(无需在配置文件中存储密码) | ⚠️ 较低(需要配置密码和安全令牌) |
148
+ | Token 刷新 | ✅ 自动刷新 | ✅ 自动刷新 |
149
+ | 有效期 | 2 小时(可自动刷新) | 永不过期 |
150
+ | 推荐程度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
151
+
152
+ ---
153
+
154
+ ### 配置项说明(neo-cmp-cli)
155
+ [请查看neo-cmp-cli](https://www.npmjs.com/package/neo-cmp-cli)
@@ -43,12 +43,76 @@ $ npm run linkDebug
43
43
  $ npm run pushCmp
44
44
  ```
45
45
 
46
- ##### 需自行添加 NeoCRM 授权配置
46
+
47
+ ### 🔐 授权配置
48
+
49
+ 使用 `neo push cmp`、`neo pull cmp`、`neo delete cmp` 等命令与 NeoCRM 平台交互时,需要配置授权信息。
50
+
51
+ #### 方式一:OAuth2 登录授权(推荐)
52
+
53
+ OAuth2 授权码模式更加安全可靠,无需用户配置账户名和密码。
54
+
55
+ ##### 使用步骤
56
+
57
+ 1. **登录 NeoCRM 平台**
58
+ ```bash
59
+ neo login
60
+ ```
61
+
62
+ 执行流程:
63
+ - 自动打开浏览器访问授权页面
64
+ - 在浏览器中输入 NeoCRM 账号密码进行登录(需选择对应的租户)
65
+ - 授权成功后自动跳转回本地(附带 code)
66
+ - cli 端 通过 code 获取 Token,并自动保存到项目的 `.neo-cli/token.json` 文件中
67
+
68
+ 2. **登出 NeoCRM 平台**
69
+ ```bash
70
+ neo logout
71
+ ```
72
+
73
+ 功能:清除本地保存的 token 文件,下次使用需要重新登录。
74
+
75
+ ##### 配置示例
76
+
47
77
  ```javascript
78
+ // neo.config.js
48
79
  module.exports = {
49
80
  neoConfig: {
50
81
  neoBaseURL: 'https://crm-cd.xiaoshouyi.com', // 平台根地址(默认:https://crm.xiaoshouyi.com)
51
- tokenAPI: 'https://login-cd.xiaoshouyi.com/auc/oauth2/token', // Token 获取接口地址(默认:https://login.xiaoshouyi.com/auc/oauth2/token
82
+ // 登录授权 URL(用于获取 code
83
+ loginURL: 'https://login-cd.xiaoshouyi.com/auc/oauth2/auth',
84
+ tokenAPI: 'https://login-cd.xiaoshouyi.com/auc/oauth2/token', // Token 获取接口地址
85
+ },
86
+ }
87
+ ```
88
+
89
+ ##### Token 有效期
90
+
91
+ - **access_token**:默认有效期 2 小时
92
+ - **refresh_token**:默认有效期 30 天
93
+ - 系统会在 access_token 过期前 5 分钟自动刷新
94
+ - 如果 refresh_token 也过期,需要重新执行 `neo login`
95
+
96
+ ##### 常见问题
97
+
98
+ **Q1: 浏览器无法自动打开怎么办?**
99
+ A: 命令行会输出授权 URL,手动复制到浏览器中打开即可。
100
+
101
+ **Q2: Token 刷新失败怎么办?**
102
+ A: 如果 refresh_token 也过期(默认 30 天),需要重新执行 `neo login`。同时检查网络连接是否正常。
103
+
104
+ **Q3: 授权登录后没有正常跳回 redirect_uri**
105
+ A: 可能被浏览器安装的插件影响,目前已知会影响授权登录的浏览器插件有:Neo UI Extension,请关闭插件后重试。
106
+
107
+ #### 方式二:密码授权配置
108
+
109
+ 在项目根目录的 `neo.config.js` 文件中添加 NeoCRM 平台授权配置:
110
+
111
+ ```javascript
112
+ module.exports = {
113
+ neoConfig: {
114
+ neoBaseURL: 'https://crm-cd.xiaoshouyi.com', // 平台根地址(默认:https://crm.xiaoshouyi.com)
115
+ tokenAPI: 'https://login-cd.xiaoshouyi.com/auc/oauth2/token', // Token 获取接口地址
52
116
  // NeoCRM 授权配置
53
117
  auth: {
54
118
  client_id: 'xx', // 客户端 ID,从创建连接器的客户端信息中获取(Client_Id)
@@ -63,9 +127,28 @@ module.exports = {
63
127
  },
64
128
  }
65
129
  ```
66
- 1、客户端 ID 和 客户端秘钥 需通过 创建连接器 获取,获取方式见:[https://doc.xiaoshouyi.com](https://doc.xiaoshouyi.com) / 创建连接器;
67
- 2、如何获取 安全令牌 见:[https://doc.xiaoshouyi.com](https://doc.xiaoshouyi.com) / OAuth安全认证 / 密码模式 / 获取令牌;
68
- 3、发布成功后即可在 NeoCRM 对应租户环境的页面设计器和表单设计器中使用此自定义组件。
130
+
131
+ ##### 授权配置获取方式
132
+
133
+ 1. **客户端 ID 和客户端秘钥**:需通过创建连接器获取
134
+ - 访问 [销售易文档中心](https://doc.xiaoshouyi.com) / 创建连接器
135
+ - 创建连接器后,从客户端信息中获取 `Client_Id` 和 `Client_Secret`
136
+
137
+ 2. **安全令牌**:如何获取安全令牌
138
+ - 访问 [销售易文档中心](https://doc.xiaoshouyi.com) / OAuth安全认证 / 密码模式 / 获取令牌
139
+ - 按照文档说明获取 8 位安全令牌
140
+ - `password` 字段 = 用户账户密码 + 8 位安全令牌(直接拼接,无空格或分隔符)
141
+
142
+ #### OAuth2 模式 vs 密码模式
143
+
144
+ | 特性 | OAuth2 授权码模式 | 密码模式 |
145
+ |------|------------------|---------|
146
+ | 安全性 | ✅ 高(无需在配置文件中存储密码) | ⚠️ 较低(需要配置密码和安全令牌) |
147
+ | Token 刷新 | ✅ 自动刷新 | ✅ 自动刷新 |
148
+ | 有效期 | 2 小时(可自动刷新) | 永不过期 |
149
+ | 推荐程度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
150
+
151
+ ---
69
152
 
70
153
  ### 配置项说明(neo-cmp-cli)
71
- [请查看neo-cmp-cli](https://github.com/wibetter/neo-cmp-cli)
154
+ [请查看neo-cmp-cli](https://www.npmjs.com/package/neo-cmp-cli)
@@ -43,12 +43,76 @@ $ npm run linkDebug
43
43
  $ npm run pushCmp
44
44
  ```
45
45
 
46
- ##### 需自行添加 NeoCRM 授权配置
46
+
47
+ ### 🔐 授权配置
48
+
49
+ 使用 `neo push cmp`、`neo pull cmp`、`neo delete cmp` 等命令与 NeoCRM 平台交互时,需要配置授权信息。
50
+
51
+ #### 方式一:OAuth2 登录授权(推荐)
52
+
53
+ OAuth2 授权码模式更加安全可靠,无需用户配置账户名和密码。
54
+
55
+ ##### 使用步骤
56
+
57
+ 1. **登录 NeoCRM 平台**
58
+ ```bash
59
+ neo login
60
+ ```
61
+
62
+ 执行流程:
63
+ - 自动打开浏览器访问授权页面
64
+ - 在浏览器中输入 NeoCRM 账号密码进行登录(需选择对应的租户)
65
+ - 授权成功后自动跳转回本地(附带 code)
66
+ - cli 端 通过 code 获取 Token,并自动保存到项目的 `.neo-cli/token.json` 文件中
67
+
68
+ 2. **登出 NeoCRM 平台**
69
+ ```bash
70
+ neo logout
71
+ ```
72
+
73
+ 功能:清除本地保存的 token 文件,下次使用需要重新登录。
74
+
75
+ ##### 配置示例
76
+
47
77
  ```javascript
78
+ // neo.config.js
48
79
  module.exports = {
49
80
  neoConfig: {
50
81
  neoBaseURL: 'https://crm-cd.xiaoshouyi.com', // 平台根地址(默认:https://crm.xiaoshouyi.com)
51
- tokenAPI: 'https://login-cd.xiaoshouyi.com/auc/oauth2/token', // Token 获取接口地址(默认:https://login.xiaoshouyi.com/auc/oauth2/token
82
+ // 登录授权 URL(用于获取 code
83
+ loginURL: 'https://login-cd.xiaoshouyi.com/auc/oauth2/auth',
84
+ tokenAPI: 'https://login-cd.xiaoshouyi.com/auc/oauth2/token', // Token 获取接口地址
85
+ },
86
+ }
87
+ ```
88
+
89
+ ##### Token 有效期
90
+
91
+ - **access_token**:默认有效期 2 小时
92
+ - **refresh_token**:默认有效期 30 天
93
+ - 系统会在 access_token 过期前 5 分钟自动刷新
94
+ - 如果 refresh_token 也过期,需要重新执行 `neo login`
95
+
96
+ ##### 常见问题
97
+
98
+ **Q1: 浏览器无法自动打开怎么办?**
99
+ A: 命令行会输出授权 URL,手动复制到浏览器中打开即可。
100
+
101
+ **Q2: Token 刷新失败怎么办?**
102
+ A: 如果 refresh_token 也过期(默认 30 天),需要重新执行 `neo login`。同时检查网络连接是否正常。
103
+
104
+ **Q3: 授权登录后没有正常跳回 redirect_uri**
105
+ A: 可能被浏览器安装的插件影响,目前已知会影响授权登录的浏览器插件有:Neo UI Extension,请关闭插件后重试。
106
+
107
+ #### 方式二:密码授权配置
108
+
109
+ 在项目根目录的 `neo.config.js` 文件中添加 NeoCRM 平台授权配置:
110
+
111
+ ```javascript
112
+ module.exports = {
113
+ neoConfig: {
114
+ neoBaseURL: 'https://crm-cd.xiaoshouyi.com', // 平台根地址(默认:https://crm.xiaoshouyi.com)
115
+ tokenAPI: 'https://login-cd.xiaoshouyi.com/auc/oauth2/token', // Token 获取接口地址
52
116
  // NeoCRM 授权配置
53
117
  auth: {
54
118
  client_id: 'xx', // 客户端 ID,从创建连接器的客户端信息中获取(Client_Id)
@@ -63,9 +127,28 @@ module.exports = {
63
127
  },
64
128
  }
65
129
  ```
66
- 1、客户端 ID 和 客户端秘钥 需通过 创建连接器 获取,获取方式见:[https://doc.xiaoshouyi.com](https://doc.xiaoshouyi.com) / 创建连接器;
67
- 2、如何获取 安全令牌 见:[https://doc.xiaoshouyi.com](https://doc.xiaoshouyi.com) / OAuth安全认证 / 密码模式 / 获取令牌;
68
- 3、发布成功后即可在 NeoCRM 对应租户环境的页面设计器和表单设计器中使用此自定义组件。
130
+
131
+ ##### 授权配置获取方式
132
+
133
+ 1. **客户端 ID 和客户端秘钥**:需通过创建连接器获取
134
+ - 访问 [销售易文档中心](https://doc.xiaoshouyi.com) / 创建连接器
135
+ - 创建连接器后,从客户端信息中获取 `Client_Id` 和 `Client_Secret`
136
+
137
+ 2. **安全令牌**:如何获取安全令牌
138
+ - 访问 [销售易文档中心](https://doc.xiaoshouyi.com) / OAuth安全认证 / 密码模式 / 获取令牌
139
+ - 按照文档说明获取 8 位安全令牌
140
+ - `password` 字段 = 用户账户密码 + 8 位安全令牌(直接拼接,无空格或分隔符)
141
+
142
+ #### OAuth2 模式 vs 密码模式
143
+
144
+ | 特性 | OAuth2 授权码模式 | 密码模式 |
145
+ |------|------------------|---------|
146
+ | 安全性 | ✅ 高(无需在配置文件中存储密码) | ⚠️ 较低(需要配置密码和安全令牌) |
147
+ | Token 刷新 | ✅ 自动刷新 | ✅ 自动刷新 |
148
+ | 有效期 | 2 小时(可自动刷新) | 永不过期 |
149
+ | 推荐程度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
150
+
151
+ ---
69
152
 
70
153
  ### 配置项说明(neo-cmp-cli)
71
- [请查看neo-cmp-cli](https://github.com/wibetter/neo-cmp-cli)
154
+ [请查看neo-cmp-cli](https://www.npmjs.com/package/neo-cmp-cli)
@@ -43,13 +43,14 @@ $ npm run linkDebug
43
43
  $ npm run pushCmp
44
44
  ```
45
45
 
46
+
46
47
  ### 🔐 授权配置
47
48
 
48
49
  使用 `neo push cmp`、`neo pull cmp`、`neo delete cmp` 等命令与 NeoCRM 平台交互时,需要配置授权信息。
49
50
 
50
51
  #### 方式一:OAuth2 登录授权(推荐)
51
52
 
52
- OAuth2 授权码模式更加安全可靠,且支持 token 自动刷新。
53
+ OAuth2 授权码模式更加安全可靠,无需用户配置账户名和密码。
53
54
 
54
55
  ##### 使用步骤
55
56
 
@@ -60,9 +61,9 @@ OAuth2 授权码模式更加安全可靠,且支持 token 自动刷新。
60
61
 
61
62
  执行流程:
62
63
  - 自动打开浏览器访问授权页面
63
- - 在浏览器中输入 NeoCRM 账号密码进行登录
64
- - 授权成功后自动跳转回本地
65
- - Token 自动保存到项目的 `.neo-cli/token.json` 文件中
64
+ - 在浏览器中输入 NeoCRM 账号密码进行登录(需选择对应的租户)
65
+ - 授权成功后自动跳转回本地(附带 code)
66
+ - cli 端 通过 code 获取 Token,并自动保存到项目的 `.neo-cli/token.json` 文件中
66
67
 
67
68
  2. **登出 NeoCRM 平台**
68
69
  ```bash
@@ -92,6 +93,17 @@ module.exports = {
92
93
  - 系统会在 access_token 过期前 5 分钟自动刷新
93
94
  - 如果 refresh_token 也过期,需要重新执行 `neo login`
94
95
 
96
+ ##### 常见问题
97
+
98
+ **Q1: 浏览器无法自动打开怎么办?**
99
+ A: 命令行会输出授权 URL,手动复制到浏览器中打开即可。
100
+
101
+ **Q2: Token 刷新失败怎么办?**
102
+ A: 如果 refresh_token 也过期(默认 30 天),需要重新执行 `neo login`。同时检查网络连接是否正常。
103
+
104
+ **Q3: 授权登录后没有正常跳回 redirect_uri**
105
+ A: 可能被浏览器安装的插件影响,目前已知会影响授权登录的浏览器插件有:Neo UI Extension,请关闭插件后重试。
106
+
95
107
  #### 方式二:密码授权配置
96
108
 
97
109
  在项目根目录的 `neo.config.js` 文件中添加 NeoCRM 平台授权配置:
@@ -133,13 +145,10 @@ module.exports = {
133
145
  |------|------------------|---------|
134
146
  | 安全性 | ✅ 高(无需在配置文件中存储密码) | ⚠️ 较低(需要配置密码和安全令牌) |
135
147
  | Token 刷新 | ✅ 自动刷新 | ✅ 自动刷新 |
136
- | 有效期 | 2 小时(可自动刷新) | 2 小时(可自动刷新) |
148
+ | 有效期 | 2 小时(可自动刷新) | 永不过期 |
137
149
  | 推荐程度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
138
150
 
139
- > **建议**:优先使用 OAuth2 授权码模式(`neo login`),更加安全便捷。
140
-
141
151
  ---
142
152
 
143
-
144
153
  ### 配置项说明(neo-cmp-cli)
145
- [请查看neo-cmp-cli](https://github.com/wibetter/neo-cmp-cli)
154
+ [请查看neo-cmp-cli](https://www.npmjs.com/package/neo-cmp-cli)
@@ -71,8 +71,11 @@ module.exports = function (projectPath, options = {}) {
71
71
  console.log('\n📝 说明:组件开发工具(neo-cmp-cli)无法直接改变当前命令窗口工作目录,');
72
72
  console.log(` 您需要手动执行上述命令才能进入刚创建的自定义组件项目(${projectName})。\n`);
73
73
 
74
- // 自动打开 IDE编辑器
75
- openProject('auto', projectName);
74
+ // 自动打开 IDE编辑器(异步执行,不需要等待)
75
+ openProject('auto', projectName).catch((error) => {
76
+ // 错误已在 openProject 内部处理,这里只是防止未处理的 Promise 警告
77
+ console.error(`打开编辑器时出错: ${error.message}`);
78
+ });
76
79
  }
77
80
 
78
81
  return success;
@@ -1,5 +1,6 @@
1
1
  const path = require('path');
2
- const { exec } = require('child_process');
2
+ const fs = require('fs');
3
+ const open = require('open');
3
4
  const ora = require('ora');
4
5
  const { consoleTag } = require('../neoParams');
5
6
  const { errorLog } = require('../common');
@@ -7,55 +8,79 @@ const { errorLog } = require('../common');
7
8
  /**
8
9
  * 打开自定义组件项目
9
10
  */
10
- module.exports = function (editorType, targetPath) {
11
+ module.exports = async function (editorType, targetPath) {
11
12
  const targetDir = targetPath ? path.resolve(targetPath) : process.cwd();
13
+
14
+ // 检查目录是否存在
15
+ if (!fs.existsSync(targetDir)) {
16
+ errorLog(`目录不存在: ${targetDir}`);
17
+ process.exit(1);
18
+ }
19
+
20
+ // 检查是否为目录
21
+ const stats = fs.statSync(targetDir);
22
+ if (!stats.isDirectory()) {
23
+ errorLog(`路径不是目录: ${targetDir}`);
24
+ process.exit(1);
25
+ }
26
+
12
27
  const isMac = process.platform === 'darwin';
13
28
  const isWindows = process.platform === 'win32';
14
29
  const isLinux = process.platform === 'linux';
15
30
 
16
- // 构建命令列表(按优先级排序)
17
- let commands = [];
31
+ // 构建编辑器配置列表(按优先级排序)
32
+ let editorConfigs = [];
18
33
  let editorName = '编辑器';
19
34
 
20
- // 根据编辑器类型和平台构建命令列表
35
+ // 根据编辑器类型和平台构建配置列表
21
36
  if (editorType === 'cursor') {
22
37
  editorName = 'Cursor';
38
+ // macOS 可以使用应用名称或命令名称
23
39
  if (isMac) {
24
- commands = [`cursor "${targetDir}"`, `open -a "Cursor" "${targetDir}"`];
40
+ editorConfigs = [
41
+ { app: { name: 'cursor' } },
42
+ { app: { name: 'Cursor' } }
43
+ ];
25
44
  } else if (isWindows || isLinux) {
26
- commands = [`cursor "${targetDir}"`];
45
+ editorConfigs = [{ app: { name: 'cursor' } }];
27
46
  }
28
47
  } else if (editorType === 'vscode' || editorType === 'code') {
29
48
  editorName = 'Visual Studio Code';
30
49
  if (isMac) {
31
- commands = [`code "${targetDir}"`, `open -a "Visual Studio Code" "${targetDir}"`];
50
+ editorConfigs = [
51
+ { app: { name: 'code' } },
52
+ { app: { name: 'Visual Studio Code' } }
53
+ ];
32
54
  } else if (isWindows || isLinux) {
33
- commands = [`code "${targetDir}"`];
55
+ editorConfigs = [{ app: { name: 'code' } }];
34
56
  }
35
57
  } else {
36
58
  // 自动检测:优先尝试 Cursor,如果失败则尝试 VSCode
37
59
  if (isMac) {
38
- commands = [
39
- `cursor "${targetDir}"`,
40
- `code "${targetDir}"`,
41
- `open -a "Cursor" "${targetDir}"`,
42
- `open -a "Visual Studio Code" "${targetDir}"`
60
+ editorConfigs = [
61
+ { app: { name: 'cursor' } },
62
+ { app: { name: 'Cursor' } },
63
+ { app: { name: 'code' } },
64
+ { app: { name: 'Visual Studio Code' } }
43
65
  ];
44
66
  } else if (isWindows || isLinux) {
45
- commands = [`cursor "${targetDir}"`, `code "${targetDir}"`];
67
+ editorConfigs = [
68
+ { app: { name: 'cursor' } },
69
+ { app: { name: 'code' } }
70
+ ];
46
71
  }
47
72
  }
48
73
 
49
- if (commands.length === 0) {
74
+ if (editorConfigs.length === 0) {
50
75
  errorLog(`不支持的操作系统: ${process.platform}`);
51
76
  process.exit(1);
52
77
  }
53
78
 
54
79
  const spinner = ora(`${consoleTag}正在尝试使用 ${editorName} 打开项目: ${targetDir}`).start();
55
80
 
56
- // 尝试执行命令列表中的第一个可用命令
57
- const tryCommand = (index) => {
58
- if (index >= commands.length) {
81
+ // 尝试打开编辑器
82
+ const tryOpenEditor = async (index) => {
83
+ if (index >= editorConfigs.length) {
59
84
  errorLog(
60
85
  `无法打开编辑器,已尝试所有可用方式。\n 请确保已安装 Cursor 或 Visual Studio Code 并将其添加到系统 PATH 中。`,
61
86
  spinner
@@ -63,19 +88,16 @@ module.exports = function (editorType, targetPath) {
63
88
  process.exit(1);
64
89
  }
65
90
 
66
- const command = commands[index];
67
- // 使用 exec 配合 shell 执行命令,这样可以更好地处理路径中的空格和特殊字符
68
- exec(command, { shell: true }, (error, stdout, stderr) => {
69
- if (error) {
70
- // 如果当前命令失败,尝试下一个
71
- tryCommand(index + 1);
72
- } else {
73
- // 命令执行成功,不需要继续尝试
74
- // 编辑器命令通常会立即返回,即使编辑器窗口已经打开
75
- }
76
- });
91
+ const config = editorConfigs[index];
92
+ try {
93
+ await open(targetDir, config);
94
+ spinner.stop();
95
+ // 成功打开,不需要继续尝试
96
+ } catch (error) {
97
+ // 如果当前配置失败,尝试下一个
98
+ await tryOpenEditor(index + 1);
99
+ }
77
100
  };
78
101
 
79
- tryCommand(0);
80
- spinner.stop();
102
+ await tryOpenEditor(0);
81
103
  };
@@ -1,7 +1,7 @@
1
1
  const { execSync } = require('child_process');
2
2
 
3
3
  // 所有需要废弃的版本(1.6.2 之前的所有版本)
4
- const versionsToDeprecate = ["1.6.5", "1.6.6", "1.6.7", "1.6.8", "1.7.0", "1.7.1", "1.7.2", "1.7.3"];
4
+ const versionsToDeprecate = ["1.7.5", "1.7.5-beta.1", "1.7.5-beta.2", "1.7.6", "1.7.7", "1.7.8"];
5
5
 
6
6
  const packageName = 'neo-cmp-cli';
7
7
  const deprecateMessage = '此版本为开发中版本(存在 bug),请升级到最新版本。';