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

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

Open
ryan-roemer opened this issue Mar 4, 2020 · 0 comments
Open

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

ryan-roemer opened this issue Mar 4, 2020 · 0 comments
Labels
bug Something isn't working

Comments

@ryan-roemer
Copy link
Member

ryan-roemer commented Mar 4, 2020

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'
}
@ryan-roemer ryan-roemer added the bug Something isn't working label Mar 4, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant