Skip to content

Commit 243c4ca

Browse files
committed
module: fix require of imports with package map
Signed-off-by: lazerg <lazerg2@gmail.com> Assisted-by: Claude Code
1 parent 1bcf30b commit 243c4ca

3 files changed

Lines changed: 20 additions & 1 deletion

File tree

‎lib/internal/modules/cjs/loader.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1523,7 +1523,7 @@ Module._resolveFilename = function(request, parent, isMain, options) {
15231523
const conditions = (options?.conditions) || getCjsConditions();
15241524

15251525
// Try package map resolution for bare specifiers (if --experimental-package-map is set)
1526-
if (!isRelative(request) && !path.isAbsolute(request)) {
1526+
if (request[0] !== '#' && !isRelative(request) && !path.isAbsolute(request)) {
15271527
const resolved = tryPackageMapResolveCJS(request, parent, conditions);
15281528
if (resolved !== undefined) {
15291529
return resolved;

‎test/fixtures/package-map/root/package.json‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,8 @@
33
"type": "module",
44
"exports": {
55
".": "./index.js"
6+
},
7+
"imports": {
8+
"#root": "./index.js"
69
}
710
}

‎test/parallel/test-require-package-map.js‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,22 @@ describe('CJS: --experimental-package-map', { concurrency: !process.env.TEST_PAR
132132
assert.strictEqual(status, 0, stderr);
133133
});
134134

135+
it('resolves package imports without consulting the map', () => {
136+
const { status, stdout, stderr } = spawnSync(process.execPath, [
137+
'--no-warnings',
138+
'--experimental-package-map', packageMapPath,
139+
'-e',
140+
`const root = require('#root'); console.log(root.default);`,
141+
], {
142+
cwd: fixtures.path('package-map/root'),
143+
encoding: 'utf8',
144+
});
145+
146+
assert.strictEqual(stderr, '');
147+
assert.match(stdout, /root-package/);
148+
assert.strictEqual(status, 0, stderr);
149+
});
150+
135151
it('throws when parent not in map', () => {
136152
const { status, stderr } = spawnSync(process.execPath, [
137153
'--no-warnings',

0 commit comments

Comments
 (0)