Skip to content

Commit fadebcd

Browse files
fix: get the right chunk name for preserve modules in Windows (#5625)
* add test * remove Windows drive prefix --------- Co-authored-by: Lukas Taegert-Atkinson <[email protected]>
1 parent eb07813 commit fadebcd

File tree

4 files changed

+43
-3
lines changed

4 files changed

+43
-3
lines changed

src/Chunk.ts

+9-3
Original file line numberDiff line numberDiff line change
@@ -1069,9 +1069,15 @@ export default class Chunk {
10691069
? sanitizedId.slice(0, -extensionName.length)
10701070
: sanitizedId;
10711071
if (isAbsolute(idWithoutExtension)) {
1072-
return preserveModulesRoot && resolve(idWithoutExtension).startsWith(preserveModulesRoot)
1073-
? idWithoutExtension.slice(preserveModulesRoot.length).replace(/^[/\\]/, '')
1074-
: relative(this.inputBase, idWithoutExtension);
1072+
if (preserveModulesRoot && resolve(idWithoutExtension).startsWith(preserveModulesRoot)) {
1073+
return idWithoutExtension.slice(preserveModulesRoot.length).replace(/^[/\\]/, '');
1074+
} else {
1075+
// handle edge case in Windows
1076+
if (this.inputBase === '/' && !idWithoutExtension.startsWith('/')) {
1077+
return relative(this.inputBase, idWithoutExtension.replace(/^[a-zA-Z]:[/\\]/, '/'));
1078+
}
1079+
return relative(this.inputBase, idWithoutExtension);
1080+
}
10751081
} else {
10761082
return (
10771083
this.outputOptions.virtualDirname.replace(/\/$/, '') + '/' + basename(idWithoutExtension)
+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
const assert = require('node:assert');
2+
module.exports = defineTest({
3+
description: 'get right chunk name for preserve modules',
4+
command: 'rollup -c',
5+
result(code) {
6+
assert.ok(
7+
code.includes(`//→ ${__dirname.replace(/^(\/|[a-zA-Z]:\\)/, '').replace(/\\/g, '/')}/main.js`)
8+
);
9+
assert.ok(code.includes(`//→ sub.js`));
10+
}
11+
});
+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
import sub from '/sub.js';
2+
assert.ok(sub);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
export default {
2+
input: 'main.js',
3+
output: {
4+
format: 'es',
5+
preserveModules: true
6+
},
7+
plugins: [
8+
{
9+
resolveId(id) {
10+
if (id.endsWith('sub.js')) {
11+
return id;
12+
}
13+
},
14+
load(id) {
15+
if (id.endsWith('sub.js')) {
16+
return 'export default "sub.js url"';
17+
}
18+
}
19+
}
20+
]
21+
};

0 commit comments

Comments
 (0)