nsgm-cli 2.1.21 → 2.1.22
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 +40 -0
- package/client/components/Button.tsx +0 -2
- package/client/layout/index.tsx +2 -4
- package/client/utils/common.ts +6 -8
- package/client/utils/menu.tsx +0 -1
- package/generation/client/utils/menu.tsx +0 -1
- package/jest.config.js +4 -4
- package/lib/index.js +11 -8
- package/lib/tsconfig.build.tsbuildinfo +1 -1
- package/next-env.d.ts +1 -0
- package/next.config.js +15 -109
- package/package.json +5 -3
- package/pages/_app.tsx +1 -4
- package/pages/_document.tsx +0 -1
- package/pages/_error.tsx +0 -1
- package/pages/index.tsx +0 -1
- package/pages/login.tsx +1 -1
- package/pages/template/manage.tsx +1 -1
package/README.md
CHANGED
|
@@ -383,6 +383,8 @@ npm run export
|
|
|
383
383
|
|
|
384
384
|
### Production Deployment
|
|
385
385
|
|
|
386
|
+
#### Local Deployment
|
|
387
|
+
|
|
386
388
|
```bash
|
|
387
389
|
# Start production server
|
|
388
390
|
npm start
|
|
@@ -391,6 +393,44 @@ npm start
|
|
|
391
393
|
pm2 start npm --name "nsgm-app" -- start
|
|
392
394
|
```
|
|
393
395
|
|
|
396
|
+
#### Vercel Deployment (Recommended)
|
|
397
|
+
|
|
398
|
+
NSGM CLI 完全支持 Vercel 部署,包括自动化 CI/CD 流程。
|
|
399
|
+
|
|
400
|
+
**快速开始:**
|
|
401
|
+
|
|
402
|
+
1. 推送项目到 GitHub
|
|
403
|
+
2. 访问 [Vercel Dashboard](https://vercel.com/dashboard)
|
|
404
|
+
3. 导入 GitHub 仓库
|
|
405
|
+
4. 配置环境变量(参考 `.env.vercel.example`)
|
|
406
|
+
5. 点击 "Deploy"
|
|
407
|
+
|
|
408
|
+
**详细指南:** 查看 [VERCEL_DEPLOYMENT.md](VERCEL_DEPLOYMENT.md)
|
|
409
|
+
|
|
410
|
+
**特性:**
|
|
411
|
+
|
|
412
|
+
- ✅ 自动 CI/CD 流程
|
|
413
|
+
- ✅ 预览环境(每个 PR)
|
|
414
|
+
- ✅ 自动 HTTPS
|
|
415
|
+
- ✅ 全球 CDN
|
|
416
|
+
- ✅ 无服务器函数
|
|
417
|
+
- ✅ 一键回滚
|
|
418
|
+
|
|
419
|
+
**环境变量配置:**
|
|
420
|
+
|
|
421
|
+
```
|
|
422
|
+
NODE_ENV=production
|
|
423
|
+
LOGIN_USERNAME=admin
|
|
424
|
+
LOGIN_PASSWORD_HASH=your_hash
|
|
425
|
+
DATABASE_URL=mysql://...
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
**获取密码哈希:**
|
|
429
|
+
|
|
430
|
+
```bash
|
|
431
|
+
npm run generate-password yourPassword
|
|
432
|
+
```
|
|
433
|
+
|
|
394
434
|
## 🤝 Contributing
|
|
395
435
|
|
|
396
436
|
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
|
package/client/layout/index.tsx
CHANGED
|
@@ -13,7 +13,6 @@ import {
|
|
|
13
13
|
import { useRouter } from "next/router";
|
|
14
14
|
import _ from "lodash";
|
|
15
15
|
import menuConfig, { getMenuConfig } from "@/utils/menu";
|
|
16
|
-
import getConfig from "next/config";
|
|
17
16
|
import { LogoutOutlined } from "@ant-design/icons";
|
|
18
17
|
import LanguageSwitcher from "@/components/LanguageSwitcher";
|
|
19
18
|
import { useTranslation } from "next-i18next";
|
|
@@ -33,9 +32,8 @@ interface MenuItem {
|
|
|
33
32
|
subMenus?: SubMenuItem[];
|
|
34
33
|
}
|
|
35
34
|
|
|
36
|
-
|
|
37
|
-
const
|
|
38
|
-
const { prefix } = publicRuntimeConfig;
|
|
35
|
+
// 从环境变量获取 prefix
|
|
36
|
+
const prefix = process.env.NEXT_PUBLIC_PREFIX || "";
|
|
39
37
|
|
|
40
38
|
const getLocationKey = () => {
|
|
41
39
|
const result = {
|
package/client/utils/common.ts
CHANGED
|
@@ -1,19 +1,17 @@
|
|
|
1
|
-
import getConfig from "next/config";
|
|
2
1
|
import _ from "lodash";
|
|
3
2
|
|
|
4
3
|
export const getLocalEnv = () => {
|
|
5
|
-
|
|
6
|
-
const { publicRuntimeConfig } = nextConfig;
|
|
7
|
-
let { env = "uat" } = publicRuntimeConfig;
|
|
4
|
+
let env = process.env.NEXT_PUBLIC_ENV || "uat";
|
|
8
5
|
env = env.toLowerCase();
|
|
9
6
|
return env;
|
|
10
7
|
};
|
|
11
8
|
|
|
12
9
|
export const getLocalApiPrefix = () => {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
let
|
|
16
|
-
const
|
|
10
|
+
let protocol = process.env.NEXT_PUBLIC_PROTOCOL || "http";
|
|
11
|
+
let host = process.env.NEXT_PUBLIC_HOST || "localhost";
|
|
12
|
+
let port = process.env.NEXT_PUBLIC_PORT || "3000";
|
|
13
|
+
const prefix = process.env.NEXT_PUBLIC_PREFIX || "";
|
|
14
|
+
const isExport = process.env.NEXT_PUBLIC_IS_EXPORT === "true";
|
|
17
15
|
|
|
18
16
|
let localApiPrefix = "";
|
|
19
17
|
|
package/client/utils/menu.tsx
CHANGED
package/jest.config.js
CHANGED
|
@@ -37,10 +37,10 @@ module.exports = {
|
|
|
37
37
|
coverageReporters: ['json', 'lcov', 'text', 'clover', 'html'],
|
|
38
38
|
coverageThreshold: {
|
|
39
39
|
global: {
|
|
40
|
-
branches:
|
|
41
|
-
functions:
|
|
42
|
-
lines:
|
|
43
|
-
statements:
|
|
40
|
+
branches: 2,
|
|
41
|
+
functions: 3,
|
|
42
|
+
lines: 5,
|
|
43
|
+
statements: 5
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
}
|
package/lib/index.js
CHANGED
|
@@ -19,7 +19,6 @@ const path_1 = __importDefault(require("path"));
|
|
|
19
19
|
const body_parser_1 = __importDefault(require("body-parser"));
|
|
20
20
|
const express_fileupload_1 = __importDefault(require("express-fileupload"));
|
|
21
21
|
const graphql_1 = __importDefault(require("./server/graphql"));
|
|
22
|
-
const config_1 = __importDefault(require("next/config"));
|
|
23
22
|
const cors_1 = __importDefault(require("cors"));
|
|
24
23
|
const express_session_1 = __importDefault(require("express-session"));
|
|
25
24
|
const csrf_1 = require("./server/csrf");
|
|
@@ -121,9 +120,10 @@ const startExpress = (options, callback, command = "dev") => {
|
|
|
121
120
|
server.use((0, express_fileupload_1.default)());
|
|
122
121
|
server.use("/static", express_1.default.static(path_1.default.join(__dirname, "public")));
|
|
123
122
|
server.use("/graphql", (0, graphql_1.default)(command));
|
|
124
|
-
|
|
125
|
-
const
|
|
126
|
-
const
|
|
123
|
+
// 从环境变量读取配置
|
|
124
|
+
const host = process.env.NEXT_PUBLIC_HOST || "localhost";
|
|
125
|
+
const port = process.env.NEXT_PUBLIC_PORT || "3000";
|
|
126
|
+
const prefix = process.env.NEXT_PUBLIC_PREFIX || "";
|
|
127
127
|
// 提供 CSRF token 的端点
|
|
128
128
|
server.get("/csrf-token", csrf_1.getCSRFToken);
|
|
129
129
|
if (prefix !== "") {
|
|
@@ -148,7 +148,10 @@ const startExpress = (options, callback, command = "dev") => {
|
|
|
148
148
|
};
|
|
149
149
|
exports.startExpress = startExpress;
|
|
150
150
|
// 使用新的 CLI 架构
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
151
|
+
// 仅在非测试环境中执行 CLI
|
|
152
|
+
if (process.env.NODE_ENV !== "test") {
|
|
153
|
+
(0, cli_1.runCli)().catch((error) => {
|
|
154
|
+
console.error("CLI 执行失败:", error);
|
|
155
|
+
process.exit(1);
|
|
156
|
+
});
|
|
157
|
+
}
|