@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.
- package/bin/ui-dev-server.js +1 -1
- package/package.json +1 -1
- package/utils.js +35 -0
- package/vue.config.build.js +4 -7
- package/vue.config.dev.js +4 -7
package/bin/ui-dev-server.js
CHANGED
|
@@ -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] 可先执行
|
|
26
|
+
console.warn(colorize('[ui-dev-server] 可先执行 work env <标识> 创建环境配置', 'yellow'));
|
|
27
27
|
return;
|
|
28
28
|
}
|
|
29
29
|
|
package/package.json
CHANGED
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,
|
package/vue.config.build.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,
|
|
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
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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,
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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,
|