aws-samples / aws-lambda-extensions

A collection of sample extensions to help you get started with AWS Lambda Extensions
MIT No Attribution
442 stars 145 forks source link

ES Module Issue with NodeJS examples #74

Closed marcus-lim-lrn closed 11 months ago

marcus-lim-lrn commented 1 year ago

When trying to use the example in https://github.com/aws-samples/aws-lambda-extensions/tree/main/nodejs-example-logs-api-extension at commit a3a540ba764204db08086ee626dcd8f401c395a5 I am getting the following issue come up in my cloudwatch:

nodejs-example-logs-api-extension  launching extension
--
internal/modules/cjs/loader.js:1015
throw new ERR_REQUIRE_ESM(filename, parentPath, packageJsonPath);
^
 
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /opt/nodejs-example-logs-api-extension/node_modules/node-fetch/src/index.js
require() of ES modules is not supported.
require() of /opt/nodejs-example-logs-api-extension/node_modules/node-fetch/src/index.js from /opt/nodejs-example-logs-api-extension/extensions-api.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules.
Instead rename index.js to end in .cjs, change the requiring code to use import(), or remove "type": "module" from /opt/nodejs-example-logs-api-extension/node_modules/node-fetch/package.json.
 
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1015:13)
at Module.load (internal/modules/cjs/loader.js:863:32)
at Function.Module._load (internal/modules/cjs/loader.js:708:14)
at Module.require (internal/modules/cjs/loader.js:887:19)
at require (internal/modules/cjs/helpers.js:74:18)
at Object.<anonymous> (/opt/nodejs-example-logs-api-extension/extensions-api.js:1:15)
at Module._compile (internal/modules/cjs/loader.js:999:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
at Module.load (internal/modules/cjs/loader.js:863:32)
at Function.Module._load (internal/modules/cjs/loader.js:708:14) {
code: 'ERR_REQUIRE_ESM'
}
EXTENSION   Name: nodejs-example-logs-api-extension State: Started  Events: []
nodejs-example-logs-api-extension  launching extension
internal/modules/cjs/loader.js:1015
throw new ERR_REQUIRE_ESM(filename, parentPath, packageJsonPath);
^
 
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /opt/nodejs-example-logs-api-extension/node_modules/node-fetch/src/index.js
require() of ES modules is not supported.
require() of /opt/nodejs-example-logs-api-extension/node_modules/node-fetch/src/index.js from /opt/nodejs-example-logs-api-extension/extensions-api.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules.
Instead rename index.js to end in .cjs, change the requiring code to use import(), or remove "type": "module" from /opt/nodejs-example-logs-api-extension/node_modules/node-fetch/package.json.
 
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1015:13)
at Module.load (internal/modules/cjs/loader.js:863:32)
at Function.Module._load (internal/modules/cjs/loader.js:708:14)
at Module.require (internal/modules/cjs/loader.js:887:19)
at require (internal/modules/cjs/helpers.js:74:18)
at Object.<anonymous> (/opt/nodejs-example-logs-api-extension/extensions-api.js:1:15)
at Module._compile (internal/modules/cjs/loader.js:999:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
at Module.load (internal/modules/cjs/loader.js:863:32)
at Function.Module._load (internal/modules/cjs/loader.js:708:14) {
code: 'ERR_REQUIRE_ESM'
}
EXTENSION   Name: nodejs-example-logs-api-extension State: Started  Events: []
START RequestId: b2cad615-2bfa-4b6a-a2e7-6990c17a250d Version: $LATEST
END RequestId: b2cad615-2bfa-4b6a-a2e7-6990c17a250d
REPORT RequestId: b2cad615-2bfa-4b6a-a2e7-6990c17a250d  Duration: 667.06 ms Billed Duration: 668 ms Memory Size: 128 MB Max Memory Used: 9 MB
RequestId: b2cad615-2bfa-4b6a-a2e7-6990c17a250d Error: exit status 1Extension.Crash

My System: _Node Version:_12.22.12 _OS:_macOS Monterey 12.6 _AWS CLI Version:_2.7.31 _Python Version:_3.10.6

Investigation

It appears that as per https://github.com/node-fetch/node-fetch/issues/1533 node-fetch doesn't support CommonJS and as such when dependabot did a bump in c65b424197cf1a9f7af6b5f455999b8f435ba93a broke the example

julianwood commented 11 months ago

Apologies for the delay on this. I believe this is now resolved from the Node side.