Skip to content

Commit fe1f0ac

Browse files
committed
fix: 更新 getImportMap 函数以处理未定义的导入标识符,增强导入映射的健壮性
1 parent 52b2f44 commit fe1f0ac

File tree

2 files changed

+68
-26
lines changed

2 files changed

+68
-26
lines changed
Lines changed: 67 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,25 @@
11
import { assert, test } from 'vitest';
22
import { getImportMap } from './import-map';
33

4-
54
test('should return empty import map when no manifests provided', async () => {
6-
assert.deepEqual(getImportMap({
7-
manifests: [],
8-
getScope(name) {
9-
return `/${name}/`;
10-
},
11-
getFile(name, file) {
12-
return `${name}/${file}`;
13-
},
14-
}), {
15-
imports: {},
16-
scopes: {}
17-
})
5+
assert.deepEqual(
6+
getImportMap({
7+
manifests: [],
8+
getScope(name) {
9+
return `/${name}/`;
10+
},
11+
getFile(name, file) {
12+
return `${name}/${file}`;
13+
}
14+
}),
15+
{
16+
imports: {},
17+
scopes: {}
18+
}
19+
);
1820
});
1921

20-
21-
test('should generate import map with remote exports', async () => {
22+
test('should generate import map with remote exports and module scopes', async () => {
2223
const result = getImportMap({
2324
manifests: [
2425
{
@@ -31,7 +32,7 @@ test('should generate import map with remote exports', async () => {
3132
file: 'src/entry.server.mjs',
3233
identifier: 'ssr-vue2-remote/src/entry.server'
3334
},
34-
'vue': {
35+
vue: {
3536
name: 'vue',
3637
rewrite: false,
3738
file: 'vue.mjs',
@@ -48,7 +49,7 @@ test('should generate import map with remote exports', async () => {
4849
{
4950
name: 'ssr-vue2-host',
5051
imports: {
51-
"vue": "ssr-vue2-remote/vue"
52+
vue: 'ssr-vue2-remote/vue'
5253
},
5354
exports: {}
5455
}
@@ -58,20 +59,61 @@ test('should generate import map with remote exports', async () => {
5859
},
5960
getFile(name, file) {
6061
return `${name}/${file}`;
61-
},
62+
}
6263
});
6364
assert.deepEqual(result, {
6465
imports: {
65-
'ssr-vue2-remote/src/entry.server': 'ssr-vue2-remote/src/entry.server.mjs',
66+
'ssr-vue2-remote/src/entry.server':
67+
'ssr-vue2-remote/src/entry.server.mjs',
6668
'ssr-vue2-remote/vue': 'ssr-vue2-remote/vue.mjs',
67-
'ssr-vue2-remote/src/components/index': 'ssr-vue2-remote/src/components/index.mjs',
68-
'ssr-vue2-remote/src/components': 'ssr-vue2-remote/src/components/index.mjs'
69+
'ssr-vue2-remote/src/components/index':
70+
'ssr-vue2-remote/src/components/index.mjs',
71+
'ssr-vue2-remote/src/components':
72+
'ssr-vue2-remote/src/components/index.mjs'
6973
},
70-
scopes: {
71-
'/ssr-vue2-host/': {
72-
"vue": "ssr-vue2-remote/vue.mjs",
74+
scopes: {
75+
'/ssr-vue2-host/': {
76+
vue: 'ssr-vue2-remote/vue.mjs'
77+
},
78+
'/ssr-vue2-remote/': { vue: 'ssr-vue2-remote/vue.mjs' }
79+
}
80+
});
81+
});
82+
test('should generate import map with remote exports and module scopes', async () => {
83+
const result = getImportMap({
84+
manifests: [
85+
{
86+
name: 'ssr-vue2-remote',
87+
imports: {},
88+
exports: {
89+
vue: {
90+
name: 'vue',
91+
rewrite: false,
92+
file: 'vue.mjs',
93+
identifier: 'ssr-vue2-remote/vue'
94+
}
95+
}
7396
},
74-
'/ssr-vue2-remote/': { vue: 'ssr-vue2-remote/vue.mjs' }
97+
{
98+
name: 'ssr-vue2-host',
99+
imports: {
100+
vue: 'ssr-vue2-remote/vue3'
101+
},
102+
exports: {}
103+
}
104+
],
105+
getScope(name) {
106+
return `/${name}/`;
107+
},
108+
getFile(name, file) {
109+
return `${name}/${file}`;
110+
}
111+
});
112+
assert.deepEqual(result, {
113+
imports: { 'ssr-vue2-remote/vue': 'ssr-vue2-remote/vue.mjs' },
114+
scopes: {
115+
'/ssr-vue2-remote/': { vue: 'ssr-vue2-remote/vue.mjs' },
116+
'/ssr-vue2-host/': { vue: 'ssr-vue2-remote/vue3' }
75117
}
76118
});
77119
});

packages/core/src/utils/import-map.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export function getImportMap({
4444
pathWithoutIndex(imports);
4545
Object.values(manifests).forEach((manifest) => {
4646
Object.entries(manifest.imports).forEach(([name, identifier]) => {
47-
scopes[getScope(manifest.name)][name] = imports[identifier];
47+
scopes[getScope(manifest.name)][name] = imports[identifier] ?? identifier;
4848
});
4949
});
5050
return {

0 commit comments

Comments
 (0)