@bams-app/ui-dev-server 0.0.8 → 0.0.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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/vue.config.base.js +33 -4
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bams-app/ui-dev-server",
3
- "version": "0.0.8",
3
+ "version": "0.0.9",
4
4
  "scripts": {
5
5
  "serve": "node ./bin/ui-dev-server.js",
6
6
  "build": "vue-cli-service build",
@@ -10,13 +10,41 @@ const builtinProxy = Object.fromEntries(
10
10
  ['/bams-assets', '/bams-ui-umd', '/bams-app', '/admin-api', '/preview'].map((p) => [p, { target: process.env.PROXY_TARGET }])
11
11
  );
12
12
 
13
+ /**
14
+ * 加载项目级自定义代理配置(项目根 .proxy.js,可选,不存在时返回空对象)
15
+ * 支持两种导出形式:
16
+ * - 对象:module.exports = { proxy: { '/my-api': { target: 'http://192.168.1.100:8080' } } }
17
+ * - 函数:module.exports = ({ env, projectRoot }) => ({ proxy: { ... } })
18
+ * 加载失败时告警并回退为空配置,不阻断开发服务启动
19
+ * @param {string} rootDir 项目根目录
20
+ * @param {Object} [env=process.env] 环境变量对象,透传给函数形式的导出
21
+ * @returns {Object} devServer.proxy 片段
22
+ */
23
+ function loadProjectProxy(rootDir, env = process.env) {
24
+ const filePath = path.join(rootDir, '.proxy.js');
25
+
26
+ if (!fs.existsSync(filePath)) {
27
+ return {};
28
+ }
29
+
30
+ try {
31
+ const loaded = require(filePath);
32
+ const resolved = typeof loaded === 'function' ? loaded({ env, projectRoot: rootDir }) : loaded;
33
+ console.log(`[ui-dev-server] 已加载项目代理配置: ${path.basename(filePath)}`);
34
+ return (resolved || {}).proxy || {};
35
+ } catch (err) {
36
+ console.warn(`[ui-dev-server] 项目代理配置加载失败,已忽略: ${err.message}`);
37
+ return {};
38
+ }
39
+ }
40
+
13
41
  /**
14
42
  * 生成通用基础配置(原仓库根 vue.config.js 的核心逻辑)
15
43
  * - externals(vue / vue-router / pinia)
16
44
  * - md 文件 raw-loader
17
45
  * - @components-entry 动态别名(存在 build-components-entry.js 时指向它,否则指向空入口)
18
46
  * - @configurable/* 可配置组件别名(基于环境变量与默认插槽映射)
19
- * - devServer 代理合并(项目配置优先 + 内置默认补充缺失前缀)
47
+ * - devServer 代理合并(devServer 配置 > 项目根 .proxy.js > 内置默认补充缺失前缀)
20
48
  * @param {Object} [options]
21
49
  * @param {string} options.rootDir 项目根目录
22
50
  * @param {Object} options.packageJson 项目根 package.json
@@ -28,8 +56,9 @@ function getBaseConfig(options = {}) {
28
56
  const packageJson = options.packageJson || getProjectPackageJson(rootDir);
29
57
  const devServer = options.devServer || {};
30
58
 
31
- // 项目配置优先,覆盖内置默认值;代理键序以项目配置为准,内置默认仅补充缺失前缀
32
- const devProxy = devServer.proxy || {};
59
+ // 代理优先级(同名覆盖,前者优先):options.devServer.proxy > 项目根 .proxy.js > 内置默认
60
+ // 键序即匹配序(webpack-dev-server 按插入顺序匹配前缀),项目级 key 在前,内置默认仅补充缺失前缀
61
+ const devProxy = { ...loadProjectProxy(rootDir), ...(devServer.proxy || {}) };
33
62
  const mergedProxy = Object.fromEntries([
34
63
  ...Object.entries(devProxy),
35
64
  ...Object.entries(builtinProxy).filter(([k]) => !(k in devProxy)),
@@ -72,4 +101,4 @@ function getBaseConfig(options = {}) {
72
101
  };
73
102
  }
74
103
 
75
- module.exports = { getRootDir, getProjectPackageJson, getBaseConfig };
104
+ module.exports = { getRootDir, getProjectPackageJson, getBaseConfig, loadProjectProxy };