befly 3.13.5 → 3.13.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.
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,19 @@ 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
+ if (nodeEnv !== "development" && nodeEnv !== "production") {
76
+ throw new Error(`配置错误:NODE_ENV 只能是 'development' 'production',当前值=${String(nodeEnv)}`);
77
+ }
77
78
  // 使用 importDefault 加载 configs 目录下的配置文件。
78
79
  // 合并顺序:defaultOptions ← befly.common.json ← befly.development/production.json
79
80
  const configsDir = join(process.cwd(), "configs");
80
81
  const commonConfig = await importDefault(join(configsDir, "befly.common.json"), {});
81
- const envConfig = await importDefault(join(configsDir, `befly.${envSuffix}.json`), {});
82
+ const envConfig = await importDefault(join(configsDir, `befly.${nodeEnv}.json`), {});
82
83
  const config = mergeAndConcat(defaultOptions, commonConfig, envConfig);
84
+ // 重要:nodeEnv 的来源只从 Befly.start(env) 的入参 env.NODE_ENV 传入,避免 process.env 在 bundle 阶段被常量折叠。
85
+ // 同时确保运行时行为(例如 Bun.serve development 标记)与实际选择的配置文件一致。
86
+ config.nodeEnv = nodeEnv;
83
87
  // 配置校验:redis.prefix 作为 key 前缀,由 RedisHelper 统一拼接 ":"。
84
88
  // 因此 prefix 本身不允许包含 ":",否则会导致 key 结构出现空段或多段分隔(例如 "prefix::key"),
85
89
  // 在 RedisInsight 等工具里可能显示 [NO NAME] 空分组,且容易造成 key 管理混乱。
package/dist/befly.js CHANGED
@@ -7608,13 +7608,15 @@ 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
+ if (nodeEnv !== "development" && nodeEnv !== "production") {
7613
+ throw new Error(`\u914D\u7F6E\u9519\u8BEF\uFF1ANODE_ENV \u53EA\u80FD\u662F 'development' \u6216 'production'\uFF0C\u5F53\u524D\u503C=${String(nodeEnv)}`);
7614
+ }
7614
7615
  const configsDir = join(process.cwd(), "configs");
7615
7616
  const commonConfig = await importDefault(join(configsDir, "befly.common.json"), {});
7616
- const envConfig = await importDefault(join(configsDir, `befly.${envSuffix}.json`), {});
7617
+ const envConfig = await importDefault(join(configsDir, `befly.${nodeEnv}.json`), {});
7617
7618
  const config2 = mergeAndConcat(defaultOptions, commonConfig, envConfig);
7619
+ config2.nodeEnv = nodeEnv;
7618
7620
  const redisPrefix = config2?.redis?.prefix;
7619
7621
  if (typeof redisPrefix === "string") {
7620
7622
  const trimmedPrefix = redisPrefix.trim();
@@ -10559,9 +10561,10 @@ var calcPerfTime = (startTime, endTime = Bun.nanoseconds()) => {
10559
10561
  };
10560
10562
 
10561
10563
  // utils/processInfo.ts
10562
- function getProcessRole() {
10563
- const bunWorkerId = process.env.BUN_WORKER_ID;
10564
- const pm2InstanceId = process.env.PM2_INSTANCE_ID;
10564
+ function getProcessRole(env) {
10565
+ const runtimeEnv = env || {};
10566
+ const bunWorkerId = runtimeEnv.BUN_WORKER_ID;
10567
+ const pm2InstanceId = runtimeEnv.PM2_INSTANCE_ID;
10565
10568
  if (bunWorkerId !== undefined) {
10566
10569
  return {
10567
10570
  role: bunWorkerId === "" ? "primary" : "worker",
@@ -15269,11 +15272,13 @@ class Befly {
15269
15272
  hooks = [];
15270
15273
  context = {};
15271
15274
  config = null;
15272
- async start() {
15275
+ async start(env) {
15273
15276
  try {
15274
15277
  const serverStartTime = Bun.nanoseconds();
15275
- this.config = await loadBeflyConfig();
15278
+ const runtimeEnv = env || {};
15279
+ this.config = await loadBeflyConfig(runtimeEnv.NODE_ENV);
15276
15280
  this.context.config = this.config;
15281
+ this.context.env = runtimeEnv;
15277
15282
  const { apis, tables, plugins, hooks, addons } = await scanSources();
15278
15283
  this.context.addons = addons;
15279
15284
  await checkApi(apis);
@@ -15333,7 +15338,7 @@ class Befly {
15333
15338
  }
15334
15339
  });
15335
15340
  const finalStartupTime = calcPerfTime(serverStartTime);
15336
- const processRole = getProcessRole();
15341
+ const processRole = getProcessRole(runtimeEnv);
15337
15342
  const roleLabel = processRole.role === "primary" ? "\u4E3B\u8FDB\u7A0B" : `\u5DE5\u4F5C\u8FDB\u7A0B #${processRole.instanceId}`;
15338
15343
  const envLabel = processRole.env === "standalone" ? "" : ` [${processRole.env}]`;
15339
15344
  Logger.info(`${this.config.appName} \u542F\u52A8\u6210\u529F! (${roleLabel}${envLabel})`);