在无法获取父模块的模块中使用 npm3 node_modules

Using npm3 within a module unable to get parent node_modules

不确定这是否是 npm3 的已知问题,但由于 npm3 的平面模块结构,在模块中,我无法使用 node_modules

var node_modules = fs.readdirSync('node_modules'); 

相反,我必须使用,

var node_modules = fs.readdirSync('../../node_modules');

向上遍历找到它。这显然不会发生在 npm2+ 中,因为 node_modules 嵌套在包中。

有办法解决这个问题吗?我到处寻找更好的解决方案。

这可能是一个糟糕的设计。我不确定您为什么需要手动定位 node_modules;如果您确定已经安装了某些东西,请使用内置的 require.resolve(),它会为您找到软件包。请注意,您不仅可以 require.resolve() 文件,还可以 package.json 所需包的文件,这有助于找到已安装包的根目录。

编辑:

如果您尝试使用 webpack 来捆绑服务器代码,您可以手动定义外部:

var nodeModules = {};
fs.readdirSync('node_modules') // this always exists
  .filter(function(x) {
    return ['.bin'].indexOf(x) === -1;
  })
  .forEach(function(mod) {
    nodeModules[mod] = 'commonjs ' + mod;
  })

然后在 webpack 配置中:

externals: nodeModules,