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

时间:2016-05-18 10:59:33

标签: node.js npm node-modules

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

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

相反,我必须使用,

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

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

有解决方法吗?我搜索了每个地方寻找更好的解决方案。

1 个答案:

答案 0 :(得分:1)

这可能是一个糟糕的设计。我不确定为什么你需要手动找到node_modules;如果您确定已经安装了某些内容,请使用require.resolve() builtin,为您找到包。请注意,require.resolve()文件不仅可以.js,还可以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 config中:

externals: nodeModules,