diff --git a/src/support/resolve-node-specifier.ts b/src/support/resolve-node-specifier.ts
index 8b873b3..ff2a567 100644
--- a/src/support/resolve-node-specifier.ts
+++ b/src/support/resolve-node-specifier.ts
@@ -19,7 +19,7 @@ import {dirname, relativePathToURL} from './path-utils';
export const resolveNodeSpecifier =
(modulePath: string, specifier: string, logger: Logger): string => {
- if (isURL(specifier)) {
+ if (isURL(specifier) || specifier.startsWith('/')) {
return specifier;
}
try {
diff --git a/src/test/koa-node-resolve.test.ts b/src/test/koa-node-resolve.test.ts
index ad9317d..7e1758a 100644
--- a/src/test/koa-node-resolve.test.ts
+++ b/src/test/koa-node-resolve.test.ts
@@ -107,7 +107,7 @@ test('nodeResolve middleware works even if baseURL has no pathname', async (t) =
});
test('nodeResolve middleware ignores unresolvable specifiers', async (t) => {
- t.plan(2);
+ t.plan(4);
const logger = testLogger();
createAndServe(
{
@@ -138,5 +138,52 @@ test('nodeResolve middleware ignores unresolvable specifiers', async (t) => {
`),
'should leave unresolvable specifier in inline scripts alone');
+
+ const expectedWarning =
+ '[koa-node-resolve] Unable to resolve Node module specifier "wubble-flurp" due to Error: Cannot find module \'wubble-flurp\' from \'';
+ const warnings = logger.warns.map((args) => args.join(' '));
+ warnings.forEach((msg) => {
+ t.ok(
+ msg.startsWith(expectedWarning),
+ 'Should warn user about being unable to resolve module');
+ });
+ });
+});
+
+test('nodeResolve middleware ignores absolute path specifiers', async (t) => {
+ t.plan(3);
+ const logger = testLogger();
+ createAndServe(
+ {
+ middleware: [nodeResolve({root: fixturesPath, logger})],
+ routes: {
+ '/my-module.js': `
+ import * as x from '/x.js';
+ `,
+ '/my-page.html': `
+
+ `,
+ },
+ },
+ async (server) => {
+ t.equal(
+ squeeze((await request(server).get('/my-module.js')).text),
+ squeeze(`
+ import * as x from '/x.js';
+ `),
+ 'should leave absolute path specifier in external scripts alone');
+ t.equal(
+ squeeze((await request(server).get('/my-page.html')).text),
+ squeeze(`
+
+ `),
+ 'should leave absolute path specifier in inline scripts alone');
+
+ const warnings = logger.warns.map((args) => args.join(' '));
+ t.equal(warnings.length, 0, 'Should not print any warnings');
});
});