不确定这是npm3
的已知问题,但由于npm3
的扁平模块结构,在模块中,我无法找到node_modules
使用,
var node_modules = fs.readdirSync('node_modules');
相反,我必须使用,
var node_modules = fs.readdirSync('../../node_modules');
遍历找到它。 npm2 +显然不会发生这种情况,因为node_modules
嵌套在包中。
有解决方法吗?我搜索了每个地方寻找更好的解决方案。
答案 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,