Prior to node 24 a lambda handler could be a path to a directory, which would resolve the index.js, or main field from package.json.
I don't know if this was a documented or unintended feature, but it works as recently as node 22.
Reproduction
runtime: node24
handler: dir.handler
// dir/index.js
module.exports.handler = async (event) => {
const response = {
statusCode: 200,
body: JSON.stringify('Hello from dir!'),
};
return response;
};
Error with node 24
{
"errorType": "Error",
"errorMessage": "Directory import '/var/task/dir' is not supported resolving ES modules imported from /var/runtime/index.mjs\nDid you mean to import \"/var/task/dir/index.js\"?",
"trace": [
"Error [ERR_UNSUPPORTED_DIR_IMPORT]: Directory import '/var/task/dir' is not supported resolving ES modules imported from /var/runtime/index.mjs",
"Did you mean to import \"/var/task/dir/index.js\"?",
" at finalizeResolution (node:internal/modules/esm/resolve:268:11)",
" at moduleResolve (node:internal/modules/esm/resolve:870:10)",
" at moduleResolveWithNodePath (node:internal/modules/esm/resolve:996:14)",
" at defaultResolve (node:internal/modules/esm/resolve:1039:79)",
" at #cachedDefaultResolve (node:internal/modules/esm/loader:757:20)",
" at ModuleLoader.resolve (node:internal/modules/esm/loader:734:38)",
" at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:317:38)",
" at onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:685:36)",
" at TracingChannel.tracePromise (node:diagnostics_channel:350:14)",
" at ModuleLoader.import (node:internal/modules/esm/loader:684:21)"
]
}
Prior to node 24 a lambda handler could be a path to a directory, which would resolve the index.js, or main field from package.json.
I don't know if this was a documented or unintended feature, but it works as recently as node 22.
Reproduction
runtime:
node24handler:
dir.handlerError with node 24
{ "errorType": "Error", "errorMessage": "Directory import '/var/task/dir' is not supported resolving ES modules imported from /var/runtime/index.mjs\nDid you mean to import \"/var/task/dir/index.js\"?", "trace": [ "Error [ERR_UNSUPPORTED_DIR_IMPORT]: Directory import '/var/task/dir' is not supported resolving ES modules imported from /var/runtime/index.mjs", "Did you mean to import \"/var/task/dir/index.js\"?", " at finalizeResolution (node:internal/modules/esm/resolve:268:11)", " at moduleResolve (node:internal/modules/esm/resolve:870:10)", " at moduleResolveWithNodePath (node:internal/modules/esm/resolve:996:14)", " at defaultResolve (node:internal/modules/esm/resolve:1039:79)", " at #cachedDefaultResolve (node:internal/modules/esm/loader:757:20)", " at ModuleLoader.resolve (node:internal/modules/esm/loader:734:38)", " at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:317:38)", " at onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:685:36)", " at TracingChannel.tracePromise (node:diagnostics_channel:350:14)", " at ModuleLoader.import (node:internal/modules/esm/loader:684:21)" ] }