befly 3.13.5 → 3.13.6

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
@@ -81,7 +81,7 @@ my-api/
81
81
  import { Befly } from "befly";
82
82
 
83
83
  const app = new Befly();
84
- await app.start();
84
+ await app.start(Bun.env);
85
85
  ```
86
86
 
87
87
  ## 编写第一个 API
@@ -4,4 +4,4 @@
4
4
  * 支持环境分离:befly.common.json + befly.development/production.json
5
5
  */
6
6
  import type { BeflyOptions } from "./types/befly";
7
- export declare function loadBeflyConfig(): Promise<BeflyOptions>;
7
+ export declare function loadBeflyConfig(nodeEnv?: string): Promise<BeflyOptions>;
@@ -71,15 +71,18 @@ const defaultOptions = {
71
71
  // ========== Addon 配置 ==========
72
72
  addons: {}
73
73
  };
74
- export async function loadBeflyConfig() {
75
- const nodeEnv = process.env.NODE_ENV || "development";
76
- const envSuffix = nodeEnv === "production" ? "production" : "development";
74
+ export async function loadBeflyConfig(nodeEnv) {
75
+ const normalizedNodeEnv = normalizeNodeEnv(nodeEnv);
76
+ const envSuffix = normalizedNodeEnv === "production" ? "production" : "development";
77
77
  // 使用 importDefault 加载 configs 目录下的配置文件。
78
78
  // 合并顺序:defaultOptions ← befly.common.json ← befly.development/production.json
79
79
  const configsDir = join(process.cwd(), "configs");
80
80
  const commonConfig = await importDefault(join(configsDir, "befly.common.json"), {});
81
81
  const envConfig = await importDefault(join(configsDir, `befly.${envSuffix}.json`), {});
82
82
  const config = mergeAndConcat(defaultOptions, commonConfig, envConfig);
83
+ // 重要:nodeEnv 的来源只从 Befly.start(env) 的入参 env.NODE_ENV 传入,避免 process.env 在 bundle 阶段被常量折叠。
84
+ // 同时确保运行时行为(例如 Bun.serve development 标记)与实际选择的配置文件一致。
85
+ config.nodeEnv = normalizedNodeEnv;
83
86
  // 配置校验:redis.prefix 作为 key 前缀,由 RedisHelper 统一拼接 ":"。
84
87
  // 因此 prefix 本身不允许包含 ":",否则会导致 key 结构出现空段或多段分隔(例如 "prefix::key"),
85
88
  // 在 RedisInsight 等工具里可能显示 [NO NAME] 空分组,且容易造成 key 管理混乱。
@@ -92,3 +95,9 @@ export async function loadBeflyConfig() {
92
95
  }
93
96
  return config;
94
97
  }
98
+ function normalizeNodeEnv(nodeEnv) {
99
+ if (typeof nodeEnv === "string" && nodeEnv.trim()) {
100
+ return nodeEnv.trim();
101
+ }
102
+ return "development";
103
+ }
package/dist/befly.js CHANGED
@@ -7608,13 +7608,14 @@ var defaultOptions = {
7608
7608
  disableMenus: ["**/404", "**/403", "**/500", "**/login"],
7609
7609
  addons: {}
7610
7610
  };
7611
- async function loadBeflyConfig() {
7612
- const nodeEnv = "development";
7613
- const envSuffix = nodeEnv === "production" ? "production" : "development";
7611
+ async function loadBeflyConfig(nodeEnv) {
7612
+ const normalizedNodeEnv = normalizeNodeEnv(nodeEnv);
7613
+ const envSuffix = normalizedNodeEnv === "production" ? "production" : "development";
7614
7614
  const configsDir = join(process.cwd(), "configs");
7615
7615
  const commonConfig = await importDefault(join(configsDir, "befly.common.json"), {});
7616
7616
  const envConfig = await importDefault(join(configsDir, `befly.${envSuffix}.json`), {});
7617
7617
  const config2 = mergeAndConcat(defaultOptions, commonConfig, envConfig);
7618
+ config2.nodeEnv = normalizedNodeEnv;
7618
7619
  const redisPrefix = config2?.redis?.prefix;
7619
7620
  if (typeof redisPrefix === "string") {
7620
7621
  const trimmedPrefix = redisPrefix.trim();
@@ -7624,6 +7625,12 @@ async function loadBeflyConfig() {
7624
7625
  }
7625
7626
  return config2;
7626
7627
  }
7628
+ function normalizeNodeEnv(nodeEnv) {
7629
+ if (typeof nodeEnv === "string" && nodeEnv.trim()) {
7630
+ return nodeEnv.trim();
7631
+ }
7632
+ return "development";
7633
+ }
7627
7634
 
7628
7635
  // checks/checkApi.ts
7629
7636
  init_logger();
@@ -10559,9 +10566,10 @@ var calcPerfTime = (startTime, endTime = Bun.nanoseconds()) => {
10559
10566
  };
10560
10567
 
10561
10568
  // utils/processInfo.ts
10562
- function getProcessRole() {
10563
- const bunWorkerId = process.env.BUN_WORKER_ID;
10564
- const pm2InstanceId = process.env.PM2_INSTANCE_ID;
10569
+ function getProcessRole(env) {
10570
+ const runtimeEnv = env || {};
10571
+ const bunWorkerId = runtimeEnv.BUN_WORKER_ID;
10572
+ const pm2InstanceId = runtimeEnv.PM2_INSTANCE_ID;
10565
10573
  if (bunWorkerId !== undefined) {
10566
10574
  return {
10567
10575
  role: bunWorkerId === "" ? "primary" : "worker",
@@ -15269,11 +15277,13 @@ class Befly {
15269
15277
  hooks = [];
15270
15278
  context = {};
15271
15279
  config = null;
15272
- async start() {
15280
+ async start(env) {
15273
15281
  try {
15274
15282
  const serverStartTime = Bun.nanoseconds();
15275
- this.config = await loadBeflyConfig();
15283
+ const runtimeEnv = env || {};
15284
+ this.config = await loadBeflyConfig(runtimeEnv.NODE_ENV);
15276
15285
  this.context.config = this.config;
15286
+ this.context.env = runtimeEnv;
15277
15287
  const { apis, tables, plugins, hooks, addons } = await scanSources();
15278
15288
  this.context.addons = addons;
15279
15289
  await checkApi(apis);
@@ -15333,7 +15343,7 @@ class Befly {
15333
15343
  }
15334
15344
  });
15335
15345
  const finalStartupTime = calcPerfTime(serverStartTime);
15336
- const processRole = getProcessRole();
15346
+ const processRole = getProcessRole(runtimeEnv);
15337
15347
  const roleLabel = processRole.role === "primary" ? "\u4E3B\u8FDB\u7A0B" : `\u5DE5\u4F5C\u8FDB\u7A0B #${processRole.instanceId}`;
15338
15348
  const envLabel = processRole.env === "standalone" ? "" : ` [${processRole.env}]`;
15339
15349
  Logger.info(`${this.config.appName} \u542F\u52A8\u6210\u529F! (${roleLabel}${envLabel})`);