I am following this article to modularize my schema into separate files. I followed the article exactly, but when I try to run things, I get Cannot use import statement outside a module.
Does anybody have any ideas what might be causing this and how to fix it?
Yeah that’s what I thought originally too, but then when I do that, I get…
Error [ERR_REQUIRE_ESM]: require() of ES Module /Users/jacobgraf/Sites/project-apollo/graphql.js from /usr/local/lib/node_modules/serverless/lib/plugins/aws/invokeLocal/index.js not supported.
Instead change the require of graphql.js in /usr/local/lib/node_modules/serverless/lib/plugins/aws/invokeLocal/index.js to a dynamic import() which is available in all CommonJS modules.
at AwsInvokeLocal.invokeLocalNodeJs (/usr/local/lib/node_modules/serverless/lib/plugins/aws/invokeLocal/index.js:818:33)
at AwsInvokeLocal.invokeLocal (/usr/local/lib/node_modules/serverless/lib/plugins/aws/invokeLocal/index.js:245:19)
at invoke:local:invoke (/usr/local/lib/node_modules/serverless/lib/plugins/aws/invokeLocal/index.js:55:47)
at PluginManager.runHooks (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:573:41)
at PluginManager.invoke (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:611:20)
at async PluginManager.run (/usr/local/lib/node_modules/serverless/lib/classes/PluginManager.js:672:7)
at async Serverless.run (/usr/local/lib/node_modules/serverless/lib/Serverless.js:467:5)
at async /usr/local/lib/node_modules/serverless/scripts/serverless.js:832:9 {
code: 'ERR_REQUIRE_ESM'
}
@jacobgraf if you control the serverless/lib/plugins/aws/invokeLocal/index.js source and can change it to leverage imports, that should help. Another option is to avoid using ESM / imports in your project-apollo/graphql.js source, and just use require there. That blog post is assuming ESM but you can still modularize your code with other approaches like CommonJS.
The “cannot use import statement outside a module” error occurs in JavaScript because import statements are only supported in ECMAScript modules (i.e. modules with the .mjs extension), and not in regular scripts (i.e. scripts with the .js extension).
If you are trying to use an import statement in a regular script, you will need to use a different approach to include the required code, such as using a CommonJS require statement, or using a bundler such as Webpack or Rollup.
Here’s an example of using a CommonJS require statement to include the code from another module: