lunarphase-js
lunarphase-js copied to clipboard
bug: NexJS build: `problem ReferenceError: exports is not defined in ES module scope`
Description
Hello @jasonsturges, I just updated the package to 2.0.2 and I am receiving this error below,
Collecting page data ...ReferenceError: exports is not defined in ES module scope
This file is being treated as an ES module because it has a '.js' file extension and '/Users/douglasmendes/Git/xpertsea/web-insights/node_modules/lunarphase-js/package.json' contains "type": "module". To treat it as a CommonJS script, rename it to use the '.cjs' file extension.
at file:///Users/douglasmendes/Git/xpertsea/web-insights/node_modules/lunarphase-js/dist/index.cjs.js:1:36
at ModuleJob.run (node:internal/modules/esm/module_job:218:25)
at async ModuleLoader.import (node:internal/modules/esm/loader:329:24)
at async importModuleDynamicallyWrapper (node:internal/vm/module:430:15)
I think this change might be impacting the build for nextJS for production:
Renaming the file from index.cjs.js
to index.cjs
resolved the build issue successfully locally.
Strangely I don't receive this in Next.js
Both TypeScript and JavaScript are functional in Next.js, with different targets.
Even before when I used Rollup directly, CommonJS has always been distributed as .js
Can you give some insights to your Next.js config, and TSConfig if you're using TypeScript?
Are you using this as import
or require
?
@mendesbarreto Try version 2.0.3 - this removes the module type specifier.
Perhaps I'm missing something here, but I'd like to understand what's occurring in your environment. If you could share some details would help to trace this.
@jasonsturges It's working now, thank you so much for your help.
Now your questions:
Are you using this as import or require?
We are using import
like:
import { Moon } from 'lunarphase-js';
It's quite odd because I've never encountered this issue with your library before. It only started happening after this recent change,
The command I am running is:
NODE_ENV=production next build
Let me know any specific details about our project here you want to know.
@mendesbarreto Thanks for the information.
Some issue interpreting ES Modules vs Common JS... I'll continue to trace it, and hopefully will match a similar environment with the issue.
Ah, finally able to replicate this in a Node.js environment - I suppose that makes sense for Next.js
index.cjs.js is treated as an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which declares all .js files in that package scope as ES modules.
...although strangely I don't experience this issue in Next.js
This defeats the purpose of configuration, though:
"main": "dist/index.cjs.js",
"module": "dist/index.es.js",
Need to research how other packages are handling this.