得到npm ERR!ENOTDIR:安装包依赖于另一个目录时不是目录

Mal*_*tha 7 node.js npm

注意:我有最新的npm和节点版本.我已经尝试了npm安装错误ENOTDIR中提供的答案,但对我没有用.

我需要在NodeRed上安装2个npm模块作为.tgz包

1. x.tgz
2. y.tgz
Run Code Online (Sandbox Code Playgroud)

我可以使用安装第一个包 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'
Run Code Online (Sandbox Code Playgroud)

根据错误日志,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"
  }
Run Code Online (Sandbox Code Playgroud)

根据说明,如果我安装x.tgz然后安装y.tgz应该没问题.我可以安装这些x和y一些时间,但现在我无法安装它.

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

Ans*_*ark 3

删除旧答案后,我正在重写这个答案。我在 Linux 上使用 Node v11.6.0 和 npm v4.5.0-next.0 对其进行了测试。

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

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

    "dependencies": {
        "@abc/pqr": "file:../x.tgz",
        "ajv": "^6.5.1",
        "debug": "^3.1.0"
    }
    
    Run Code Online (Sandbox Code Playgroud)

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

所以,你可以选择任何人作为你的发展条件。