From d5bbae9ae0ee686e225e3d28c8d3a0a2c3568ab5 Mon Sep 17 00:00:00 2001 From: Joshua Gorner Date: Wed, 9 Apr 2025 23:07:27 -0400 Subject: [PATCH] Allow imports ending with `.js` to resolve properly --- lib/loader/loader.js | 5 +++++ tests/all.js | 27 +++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/lib/loader/loader.js b/lib/loader/loader.js index deb9973..766b941 100644 --- a/lib/loader/loader.js +++ b/lib/loader/loader.js @@ -285,6 +285,11 @@ var loader, define, requireModule, require, requirejs; heimdall.increment(__findModule); var mod = registry[id] || registry[id + '/index']; + if (!mod && id.endsWith('.js')) { + id = id.replace(/\.[^/.]+$/, ''); + mod = registry[id] || registry[id + '/index']; + } + while (mod && mod.isAlias) { mod = registry[mod.id] || registry[mod.id + '/index']; } diff --git a/tests/all.js b/tests/all.js index 94f16d6..3734e20 100644 --- a/tests/all.js +++ b/tests/all.js @@ -1842,4 +1842,31 @@ QUnit.module('loader.js api', function(hooks) { define.alias('foo', 'foo/bar'); assert.equal(require('foo/bar'), 'foo'); }); + + QUnit.test('foo.js automatically falls back to foo', function(assert) { + define('foo', [] , function() { + return { 'default': 'hi' }; + }); + + define('bar', ['foo.js', 'foo'] , function(foo, fooIndex) { + assert.deepEqual(foo, fooIndex); + }); + + assert.deepEqual(require('foo'), require('foo.js')); + + var stats = statsForMonitor('loaderjs', tree); + + assert.deepEqual(stats, { + findDeps: 1, + define: 2, + exports: 1, + findModule: 2, + modules: 2, + reify: 1, + require: 2, + resolve: 0, + resolveRelative: 0, + pendingQueueLength: 1 + }); + }); });