module-deps icon indicating copy to clipboard operation
module-deps copied to clipboard

module-deps seems incompatible with node-resolve

Open strugee opened this issue 5 years ago • 0 comments

See https://stackoverflow.com/q/51347558/1198896 for the detailed background, but basically, given the following minimal testcase:

test.js:

require('./test2.js');

test2.js: (empty)

test3.js:

var resolve = require('resolve'),
    mdeps = require('module-deps'),
    through2 = require('through2');

var md = mdeps({
        resolve: resolve
});

md.end(require.resolve('./test.js'));

Running test3.js creates this output:

events.js:183
      throw er; // Unhandled 'error' event
      ^

Error: Cannot find module './test2.js' from '/Users/alex/Development/audittool/test.js'
    at /Users/alex/Development/audittool/node_modules/resolve/lib/async.js:65:35
    at load (/Users/alex/Development/audittool/node_modules/resolve/lib/async.js:84:43)
    at onex (/Users/alex/Development/audittool/node_modules/resolve/lib/async.js:109:17)
    at /Users/alex/Development/audittool/node_modules/resolve/lib/async.js:12:69
    at FSReqWrap.oncomplete (fs.js:152:21)

The problem seems to be that node-resolve is not getting the correct basedir in its options object. Modifying node_modules/module-deps/index.js to insert if (parent.package) parent.basedir = parent.package.__dirname; on line 170 (right before the self.resolver() call) appears to fix this issue. I would PR but I don't know the source well enough to judge whether that's actually the correct place.

strugee avatar Jul 16 '18 03:07 strugee