收到npm ERR! ENOTDIR:安装软件包时不依赖于另一个目录

时间:2018-12-20 12:58:32

标签: node.js npm

注意:我拥有最新的npm和节点版本。我已经尝试过npm install error ENOTDIR中提供的答案,但对我没有用。

我需要在NodeRed上安装2个.tgz软件包提供的npm模块

1. x.tgz
2. y.tgz

我可以使用npm install path/to/x.tgz

安装第一个软件包

我使用了相同的命令npm install path/to/y.tgz,但出现以下错误。

malintha@malintha-VirtualBox:~/.node-red$ sudo npm install path/to/y.tgz 

npm ERR! path path/to/y.tgz/x.tgz

npm ERR! code ENOTDIR
npm ERR! errno -20
npm ERR! syscall stat
npm ERR! ENOTDIR: not a directory, stat 'path/to/y.tgz/x.tgz'

根据错误日志,y模块正在其中查找x.tgz。然后,我检查了package.json个伪像中的y.tgz

我可以看到它里面有x.tgz作为依赖项,但是里面没有x.tgz。

 "dependencies": {
    "@abc/pqr": "file:x.tgz",
    "ajv": "^6.5.1",
    "debug": "^3.1.0"
  }

根据说明,如果我先安装x.tgz,然后再安装y.tgz,应该没问题。我可以在一段时间之前安装这些xy,但现在无法安装。

此问题的根本原因可能是什么? 这是npm和节点版本相关的问题吗?

1 个答案:

答案 0 :(得分:2)

删除旧答案后,我将重新编写此答案。我在Linux上分别使用节点v11.6.0和npm v4.5.0-next.0对其进行了测试。

要安装y.tgz,我尝试如下操作:

  1. 我将两个tgz文件都复制到了同一目录中。
  2. 我对y.tgz的package.json进行了如下修改:

    "dependencies": {
        "@abc/pqr": "file:../x.tgz",
        "ajv": "^6.5.1",
        "debug": "^3.1.0"
    }
    

dependencies支持file: +相对路径或绝对路径。

因此,您可以选择任何人作为您的开发条件。