Sitelet https://github.com/nodejs/node/issues/53806
Skip to content

Erronous import failure message #53806

Description

@dakhnod

Version

v20.10.0 up to v22.4.1

Platform

Linux dakhnod 6.5.0-10043-tuxedo #47 SMP PREEMPT_DYNAMIC Tue Jun  4 14:29:55 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

Subsystem

No response

What steps will reproduce the bug?

  1. run npm install is-odd
  2. delete node_modules/is-odd/index.js
  3. start node
  4. run await import("is-odd")
    -> Should yield this message:
Uncaught:
Error: Cannot find package '/app/node_modules/is-odd/package.json' imported from /app/repl
    at legacyMainResolve (node:internal/modules/esm/resolve:210:26)
    at packageResolve (node:internal/modules/esm/resolve:829:14)
    at moduleResolve (node:internal/modules/esm/resolve:915:18)
    at defaultResolve (node:internal/modules/esm/resolve:1132:11)
    at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:557:12)
    at ModuleLoader.resolve (node:internal/modules/esm/loader:526:25)
    at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:249:38)
    at onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:484:36)
    at TracingChannel.tracePromise (node:diagnostics_channel:337:14) {
  code: 'ERR_MODULE_NOT_FOUND'
}

complaining about not being able to find package.json, although that file exists.
What is really missing is index.js, since we deleted it.

How often does it reproduce? Is there a required condition?

always

What is the expected behavior? Why is that the expected behavior?

It would help if node reported about the really missing index.js, not the existing package.json

What do you see instead?

Node complains about not being able to find package.json, although that one clearly exists.

Additional information

No response

Activity

  1. added
    loadersIssues and PRs related to ES module loaders.
    on Jul 11, 2024
  2. avivkeller commented on Jul 11, 2024

    @avivkeller
    Member

    Two questions:

    Does this also occur with require?
    Is this REPL specific, or does it occur with files?

  3. dakhnod commented on Jul 11, 2024

    @dakhnod
    Author
    > const odd = require ('is-odd');
    Uncaught:
    Error: Cannot find module '/app/node_modules/is-odd/index.js'. Please verify that the package.json has a valid "main" entry
        at tryPackage (node:internal/modules/cjs/loader:482:19)
        at Module._findPath (node:internal/modules/cjs/loader:765:18)
        at Module._resolveFilename (node:internal/modules/cjs/loader:1205:27)
        at Module._load (node:internal/modules/cjs/loader:1045:27)
        at TracingChannel.traceSync (node:diagnostics_channel:315:14)
        at wrapModuleLoad (node:internal/modules/cjs/loader:215:24)
        at Module.require (node:internal/modules/cjs/loader:1304:12)
        at require (node:internal/modules/helpers:123:16) {
      code: 'MODULE_NOT_FOUND',
      path: '/app/node_modules/is-odd/package.json',
      requestPath: 'is-odd'
    }

    require works properly.

    Yep, also occurs in files:

    root@18f9f8c95d94:/app# node app.mjs 
    node:internal/modules/esm/resolve:210
      const resolvedOption = FSLegacyMainResolve(packageJsonUrlString, packageConfig.main, baseStringified);
                             ^
    
    Error: Cannot find package '/app/node_modules/is-odd/package.json' imported from /app/app.mjs
        at legacyMainResolve (node:internal/modules/esm/resolve:210:26)
        at packageResolve (node:internal/modules/esm/resolve:829:14)
        at moduleResolve (node:internal/modules/esm/resolve:915:18)
        at defaultResolve (node:internal/modules/esm/resolve:1132:11)
        at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:557:12)
        at ModuleLoader.resolve (node:internal/modules/esm/loader:526:25)
        at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:249:38)
        at onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:484:36)
        at TracingChannel.tracePromise (node:diagnostics_channel:337:14)
        at ModuleLoader.import (node:internal/modules/esm/loader:483:21) {
      code: 'ERR_MODULE_NOT_FOUND'
    }
    
    Node.js v22.4.1
  4. avivkeller commented on Jul 11, 2024

    @avivkeller
    Member

    I'm not able to reproduce
    screen-capture.webm

  5. dakhnod commented on Jul 11, 2024

    @dakhnod
    Author

    you need to delete the index.js

  6. avivkeller commented on Jul 11, 2024

    @avivkeller
    Member

    Oh, okay

  7. avivkeller commented on Jul 11, 2024

    @avivkeller
    Member

    + repro-exists:

    $ npm i is-odd
    
    added 2 packages in 329ms
                                                                                                                                                                                                                                   
    $ rm node_modules/is-odd/index.js    
                                                                                                                                                                                                                                   
    $ node        
    Welcome to Node.js v22.4.1.
    Type ".help" for more information.
    > await import('is-odd')
    Uncaught:
    Error: Cannot find package '/node_modules/is-odd/package.json' imported from /repl
        at legacyMainResolve (node:internal/modules/esm/resolve:210:26)
        at packageResolve (node:internal/modules/esm/resolve:829:14)
        at moduleResolve (node:internal/modules/esm/resolve:915:18)
        at defaultResolve (node:internal/modules/esm/resolve:1132:11)
        at ModuleLoader.defaultResolve (node:internal/modules/esm/loader:557:12)
        at ModuleLoader.resolve (node:internal/modules/esm/loader:526:25)
        at ModuleLoader.getModuleJob (node:internal/modules/esm/loader:249:38)
        at onImport.tracePromise.__proto__ (node:internal/modules/esm/loader:484:36)
        at TracingChannel.tracePromise (node:diagnostics_channel:337:14) {
      code: 'ERR_MODULE_NOT_FOUND'
    }
    > 
    
  8. dakhnod commented on Jul 11, 2024

    @dakhnod
    Author

    So...does this confirm my description?

  9. avivkeller commented on Jul 11, 2024

    @avivkeller
    Member

    Yup :-)

  10. targos commented on Jul 11, 2024

    @targos
    Member

    @nodejs/loaders

  11. targos commented on Jul 11, 2024

    @targos
    Member

    Note that the message was never precisely correct in ESM.
    Behavior changed between Node.js 20.4.0 and 20.5.0.

    In v20.4.0, the message was:

    Error [ERR_MODULE_NOT_FOUND]: Cannot find package '/XXX/node_modules/is-odd/' imported from /XXX/test.js
    
  12. marco-ippolito commented on Jul 15, 2024

    @marco-ippolito
    Member

    I believe this is an edge case that has not been covered.
    This might be the commit that might have introduced it a2a8e31, released in Node v20.5.0
    cc @H4ad

  13. H4ad commented on Jul 15, 2024

    @H4ad
    Member

    I forgot to translate correctly the path fileURLToPath(new url(/sitelet?url=https%3A%2F%2Fgithub.com%2Fnodejs%2Fnode%2Fissues%2F%27.%27%2C%2520packageJSONUrl)), fileURLToPath(base)).

    I will try open a PR soon.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    loadersIssues and PRs related to ES module loaders.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions