netlify/cli

Netlify functions not working with ESM; always build to module.exports CJS syntax even with package.json "type" set to "module"

Opened this issue · 0 comments

Describe the bug

In a simple app I just began today, Netlify functions aren't working with ESM. Despite setting node_bundler = "esbuild" in my netlify.toml file, the bundled version of my functions file still includes "CJS module.exports" syntax, which throw errors in testing:

Screenshot 2024-03-15 at 7 30 44 AM

package.json set for "module"
Screenshot 2024-03-15 at 7 37 59 AM

Of note, if I set my project to use CJS by removing "type": "module" from package.json, then the functions work:
Screenshot 2024-03-15 at 7 40 29 AM

Steps to reproduce

In a Vite Vue 3 app with Netlify globally installed

  1. Use provided netlify.toml file in Configuration section
  2. Create functions folder with following test.js file:
const handler = async (event, context) => {
  return {
    statusCode: 200,
    body: JSON.stringify({ message: "test" })
  }
}

export { handler }
  1. Run netlify dev
  2. Test netlify function: in VSCode, I'm using the REST client with following code within an apiTests.http file:
    get http://localhost:<port>/.netlify/functions/test

Configuration

[build]
functions = "functions"

[build.environment]
NODE_VERSION = "20.11.1"

[functions]
directory = "functions"
node_bundler = "esbuild"

Environment

System:
OS: macOS 14.0
CPU: (12) x64 Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
Memory: 11.95 GB / 32.00 GB
Shell: 5.9 - /bin/zsh
Binaries:
Node: 20.11.1 - ~/.nvm/versions/node/v20.11.1/bin/node
npm: 10.2.4 - ~/.nvm/versions/node/v20.11.1/bin/npm
npmGlobalPackages:
netlify-cli: 17.19.3