Skip to content
This repository was archived by the owner on Aug 13, 2022. It is now read-only.
This repository was archived by the owner on Aug 13, 2022. It is now read-only.

Upstream Bug (?): Arcane resolution rules with package.json #14

Description

@ryan-roemer

For a contrived example like:

// pkgs/index.js
const dep = require("./dep");
console.log("TODO HERE", { dep });

// pkgs/dep/deeper/index.js
module.exports = "deeper index";

// pkgs/dep/deeper/package.json
{
  "main": "diff.js"
}

// pkgs/dep/deeper/diff.js
module.exports = "diff";

// pkgs/dep/index.js
module.exports = "dep index";

// pkgs/dep/package.json
{
  "main": "deeper"
}

Node.js resolves thusly:

$ node pkgs
TODO HERE { dep: 'deeper index' }

which means pkgs/dep/package.json is read, but pkgs/dep/deeper/package.json is not, instead just using pkgs/dep/deeper/index.js.

In trace-deps, the resolve library instead comes up with our traced deps as:

// out/pkgs/index.js
const dep = require("./dep");
console.log("TODO HERE", { dep });

// out/pkgs/dep/deeper/package.json
{
  "main": "diff.js"
}

// out/pkgs/dep/deeper/diff.js
module.exports = "diff";

// out/pkgs/dep/package.json
{
  "main": "deeper"
}

// out/package.json
{
  /* snipped */
}

The problem is for the nested load of deeper, resolve() is using deeper/package.json:main and real Node.js doesn't instead using deeper/index.js directly, which we see in output here:

$ node out/pkgs/index.js 
internal/modules/cjs/loader.js:305
      throw err;
      ^

Error: Cannot find module '/Users/rye/Desktop/TD_TEST/out/pkgs/dep/deeper'. Please verify that the package.json has a valid "main" entry
    at tryPackage (internal/modules/cjs/loader.js:297:19)
    at Function.Module._findPath (internal/modules/cjs/loader.js:528:18)
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:780:27)
    at Function.Module._load (internal/modules/cjs/loader.js:686:27)
    at Module.require (internal/modules/cjs/loader.js:848:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at Object.<anonymous> (/Users/rye/Desktop/TD_TEST/out/pkgs/index.js:1:13)
    at Module._compile (internal/modules/cjs/loader.js:955:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:991:10)
    at Module.load (internal/modules/cjs/loader.js:811:32) {
  code: 'MODULE_NOT_FOUND',
  path: '/Users/rye/Desktop/TD_TEST/out/pkgs/dep/package.json',
  requestPath: './dep'
}

Activity

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

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions