通过 package.json 安装的私有 NPM 模块没有父目录?

Private NPM modules installed via package.json without a parent directory?

我正在为 Node-RED 应用程序 (http://nodered.org/) 构建自定义节点并将每个节点发布为私有 NPM 模块并将它们放入我的 package.json 中,如下所示:

"@di-dash/node-red-contrib-didash-output": "0.0.1",

但这使得它们安装在这样的父目录中:

/node_modules/@di-dash/node-red-contrib-didash-output

事实上,它们现在位于父目录中,而不是像我刚刚拉入 github 存储库时那样直接位于 node_modules 目录中,因为依赖关系阻止了 Node-RED 注意到他们并将他们包括在应用程序中。

我写了一个 grunt 脚本将它们从父目录中拉出来并直接放入 node_modules 并将其作为 "postinstall" 脚本放入 package.json 但这必须在之后发生该应用程序启动是因为 Node-RED 应用程序不再获取我的自定义节点。

知道如何在没有父目录的情况下安装私有模块,以便它们就像普通(非私有)NPM 模块一样吗?

像这样: node_modules/node-red-contrib-didash-output

而不是: /node_modules/@di-dash/node-red-contrib-didash-output

并不是说它们是私有模块,而是它们是scoped modules。它们应该位于与它们所在范围同名的目录中。使它们安装在 root 中的唯一方法是从包中删除范围。我建议寻求 Node-RED 团队的支持,看看他们是否有针对作用域模块的解决方法。

编辑:我冒昧地为你开了一个问题 :)
https://github.com/node-red/node-red/issues/885