deno icon indicating copy to clipboard operation
deno copied to clipboard

"module is not defined" cjs suggestion should not occur for mjs/mts modules

Open dsherret opened this issue 1 year ago • 5 comments

> cat main.mjs
import * as a from "./a.cjs";

console.log(a.add(1, 2));

module.isPreloading = true;
> deno run main.mjs
3                                                                                                                                                                                                                                                                                                                
error: Uncaught (in promise) ReferenceError: module is not defined                                                                                                                                                                                                                                                             
module.isPreloading = true;                                                                                                                                                                                                                                                                                                    
^
    at file:///V:/scratch/main.mjs:5:1

    info: Deno supports CommonJS modules in .cjs files, or when there's a package.json
          with "type": "commonjs" option and --unstable-detect-cjs flag is used.
    hint: Rewrite this module to ESM,
          or change the file extension to .cjs,
          or add package.json next to the file with "type": "commonjs" option
          and pass --unstable-detect-cjs flag.
    docs: https://docs.deno.com/go/commonjs

This suggestion doesn't make sense.

Node for example:

> node main.mjs
3
file:///V:/scratch/main.mjs:5
module.isPreloading = true;
^

ReferenceError: module is not defined in ES module scope
    at file:///V:/scratch/main.mjs:5:1
    at ModuleJob.run (node:internal/modules/esm/module_job:262:25)
    at async ModuleLoader.import (node:internal/modules/esm/loader:474:24)
    at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:109:5)

Node.js v22.3.0

dsherret avatar Oct 25 '24 23:10 dsherret

@bartlomieju is this a good first issue?

Relevant code is here: https://github.com/denoland/deno/blob/d92d2fe9b0bd5e6e29cb3b6f924472aec972b636/runtime/fmt_errors.rs#L307-L309

dsherret avatar Oct 25 '24 23:10 dsherret

@dsherret Can I work on this??

SaiThanushreddy avatar Oct 26 '24 04:10 SaiThanushreddy

Yup 👍

dsherret avatar Oct 26 '24 04:10 dsherret

@dsherret To resolve the issue with suggesting CommonJS fixes for .mjs and .mts files, we can modify the get_suggestions_for_terminal_errors function to check the file extension. If the extension is .cjs, we show the CommonJS suggestions; if it’s .mjs or .mts, we skip these suggestions entirely. This will provide more accurate guidance based on the module type.

SaiThanushreddy avatar Oct 26 '24 04:10 SaiThanushreddy

Yes, it's a good first issue.

@SaiThanushreddy looks like you got a proper solution. PRs are welcome :)

bartlomieju avatar Oct 26 '24 17:10 bartlomieju

i think this is already closed right??

edilson258 avatar May 05 '25 07:05 edilson258

I'm interested in working on this issue. Could you provide more context about what you're looking for? Any additional details about requirements or constraints would be helpful.

tysoncung avatar Oct 07 '25 05:10 tysoncung