@bams-app/ui-dev-server 0.1.0 → 0.1.2

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.
@@ -23,7 +23,7 @@ function assertEnvSpecified(envInput) {
23
23
  const aliases = listEnvAliases(rootDir);
24
24
  if (aliases.length === 0) {
25
25
  console.warn(colorize('[ui-dev-server] 未找到环境配置(.envs/.env.dev-*),将以无环境变量方式启动', 'yellow'));
26
- console.warn(colorize('[ui-dev-server] 可先执行 bams-work env <标识> 创建环境配置', 'yellow'));
26
+ console.warn(colorize('[ui-dev-server] 可先执行 work env <标识> 创建环境配置', 'yellow'));
27
27
  return;
28
28
  }
29
29
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bams-app/ui-dev-server",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "scripts": {
5
5
  "serve": "node ./bin/ui-dev-server.js",
6
6
  "build": "vue-cli-service build",
package/utils.js CHANGED
@@ -244,6 +244,40 @@ function resolveComponent(componentName, rootDir, packageJson) {
244
244
  return getComponentScope(componentName, rootDir, packageJson);
245
245
  }
246
246
 
247
+ /**
248
+ * 解析 dev/build 时 @target-component 别名实际指向的组件目录
249
+ * - 完整包名(@scope/name):在候选中按 packageName 精确匹配,避免同名组件始终落到第一个
250
+ * - 路径:直接使用该路径
251
+ * - 短名:沿用第一个候选;无候选时回退 resolveComponent 结果(如已发布包从 node_modules 解析)
252
+ * @param {string} componentName - 组件名、完整包名或路径
253
+ * @param {string} rootDir - 项目根目录
254
+ * @param {Object} packageJson - package.json 对象
255
+ * @returns {string} 组件目录绝对路径或可被 webpack 解析的包名
256
+ */
257
+ function resolveTargetComponentPath(componentName, rootDir, packageJson) {
258
+ const resolvedComponent = resolveComponent(componentName, rootDir, packageJson);
259
+
260
+ // 路径形式已指向明确目录,无需再按名字查找候选
261
+ if (isFileSystemPath(componentName)) {
262
+ return resolvedComponent;
263
+ }
264
+
265
+ const candidates = findComponentCandidates(getComponentEntryName(componentName), rootDir, packageJson);
266
+ if (candidates.length === 0) {
267
+ return resolvedComponent;
268
+ }
269
+
270
+ // 完整包名:按 packageName 精确匹配同名组件所属 scope
271
+ if (componentName.startsWith('@')) {
272
+ const matched = candidates.find((candidate) => candidate.packageName === componentName);
273
+ if (matched) {
274
+ return matched.componentPath;
275
+ }
276
+ }
277
+
278
+ return candidates[0].componentPath;
279
+ }
280
+
247
281
  /**
248
282
  * 从组件名或路径中提取组件入口名(用于前端渲染)
249
283
  * @param {string} componentName - 组件名或路径
@@ -553,6 +587,7 @@ module.exports = {
553
587
  findComponentCandidates,
554
588
  getComponentScope,
555
589
  resolveComponent,
590
+ resolveTargetComponentPath,
556
591
  getComponentEntryName,
557
592
  toCamelComponentName,
558
593
  colorize,
@@ -1,7 +1,7 @@
1
1
  const { defineConfig } = require('@vue/cli-service')
2
2
  const path = require('path')
3
3
  const { getBaseConfig } = require('./vue.config.base')
4
- const { getRootDir, getProjectPackageJson, resolveComponent, findComponentCandidates, getComponentEntryName } = require('./utils')
4
+ const { getRootDir, getProjectPackageJson, resolveTargetComponentPath } = require('./utils')
5
5
 
6
6
  const rootDir = getRootDir();
7
7
  const packageJson = getProjectPackageJson(rootDir);
@@ -9,12 +9,9 @@ const baseConfig = getBaseConfig({ rootDir, packageJson });
9
9
 
10
10
  const componentName = process.env.COMPONENT || 'ui-component-demo';
11
11
 
12
- const resolvedComponent = resolveComponent(componentName, rootDir, packageJson);
13
- // COMPONENT 环境变量可能是 @scope/name 完整包名,查找候选时需用短名
14
- const candidates = findComponentCandidates(getComponentEntryName(componentName), rootDir, packageJson);
15
- // 命中候选时别名指向组件目录绝对路径(避免从包目录解析用户项目组件失败)
16
- const component = candidates.length > 0 ? candidates[0].componentPath : resolvedComponent;
17
- console.log('🎉 当前开发组件:', resolvedComponent);
12
+ // COMPONENT 可能是 @scope/name 完整包名,同名组件存在多个 scope 时按包名精确匹配
13
+ const component = resolveTargetComponentPath(componentName, rootDir, packageJson);
14
+ console.log('🎉 当前构建组件:', component);
18
15
 
19
16
  module.exports = defineConfig({
20
17
  transpileDependencies: baseConfig.transpileDependencies,
package/vue.config.dev.js CHANGED
@@ -1,7 +1,7 @@
1
1
  const { defineConfig } = require('@vue/cli-service')
2
2
  const path = require('path')
3
3
  const { getBaseConfig } = require('./vue.config.base')
4
- const { getRootDir, getProjectPackageJson, resolveComponent, findComponentCandidates, getComponentEntryName, toCamelComponentName } = require('./utils')
4
+ const { getRootDir, getProjectPackageJson, resolveTargetComponentPath, toCamelComponentName } = require('./utils')
5
5
 
6
6
  const rootDir = getRootDir();
7
7
  const packageJson = getProjectPackageJson(rootDir);
@@ -11,12 +11,9 @@ const componentName = process.env.COMPONENT || 'ui-component-demo';
11
11
  const layout = process.env.LAYOUT || 'pc';
12
12
  const camelComponentName = toCamelComponentName(componentName);
13
13
 
14
- const resolvedComponent = resolveComponent(componentName, rootDir, packageJson);
15
- // COMPONENT 环境变量可能是 @scope/name 完整包名,查找候选时需用短名
16
- const candidates = findComponentCandidates(getComponentEntryName(componentName), rootDir, packageJson);
17
- // 命中候选时别名指向组件目录绝对路径(避免从包目录解析用户项目组件失败)
18
- const component = candidates.length > 0 ? candidates[0].componentPath : resolvedComponent;
19
- console.log('🎉 当前开发组件:', resolvedComponent);
14
+ // COMPONENT 可能是 @scope/name 完整包名,同名组件存在多个 scope 时按包名精确匹配
15
+ const component = resolveTargetComponentPath(componentName, rootDir, packageJson);
16
+ console.log('🎉 当前开发组件:', component);
20
17
 
21
18
  module.exports = defineConfig({
22
19
  transpileDependencies: baseConfig.transpileDependencies,