自 npm v5.5.1 以来本地 npm 依赖性被破坏
Local npm dependency broken since npm v5.5.1
在我们的 package.json 中,我们使用文件符号来引用我们自行开发的私有模块,如下所示:
"dependencies": {
"privateX": "file:////serverName/path/to/privateX",
"privateY": "file:////serverName/path/to/privateY"
}
这在 npm v4.2.0(使用 Node v7.10.1)之前工作正常。更新到 npm v5.5.1(使用 Node.js 8.9.0 LTS)后,我们无法再安装(npm install)它们并出现以下错误:
npm ERR! code ENOLOCAL
npm ERR! Could not install from "..\..\serverName\path\to\privateX" as it does not contain a package.json file.
我尝试了不同的方法,例如,这些方法也没有用:
- "privateX": "file://serverName/path/to/privateX"
- "privateX": "file:\\serverName\path\to\privateX"
npm cache clean --force 没有帮助。
只有将依赖项放在每个服务器上并使用相对路径才有效。但这是不可行的:
- "privateX": "file://../../path/to/privateX"
当我们降级回 npm v4.2.0 或更低版本时,它会再次运行。自该版本导致中断对同一网络中另一台服务器的访问以来发生了什么?或者在 npm 5.x.x 及更高版本中引用同一网络中另一台服务器上的依赖项的方法看起来如何?
我们的私有模块位于我们网络中的服务器上。 Windows 上的所有服务器都是 运行。
我能找到的最简单的解决方法是使用安装的驱动器而不是服务器名称或 UNC 路径。
- 创建一个挂载的驱动器,如 G:,引用
serverName
。
更改所有私有模块 package.json 中的模块依赖关系。
"privateX": "file://G:/path/to/privateX"
这不是最好的解决方案,但它确实有效。适用于本地和全球安装。
在我们的 package.json 中,我们使用文件符号来引用我们自行开发的私有模块,如下所示:
"dependencies": {
"privateX": "file:////serverName/path/to/privateX",
"privateY": "file:////serverName/path/to/privateY"
}
这在 npm v4.2.0(使用 Node v7.10.1)之前工作正常。更新到 npm v5.5.1(使用 Node.js 8.9.0 LTS)后,我们无法再安装(npm install)它们并出现以下错误:
npm ERR! code ENOLOCAL
npm ERR! Could not install from "..\..\serverName\path\to\privateX" as it does not contain a package.json file.
我尝试了不同的方法,例如,这些方法也没有用:
- "privateX": "file://serverName/path/to/privateX"
- "privateX": "file:\\serverName\path\to\privateX"
npm cache clean --force 没有帮助。
只有将依赖项放在每个服务器上并使用相对路径才有效。但这是不可行的:
- "privateX": "file://../../path/to/privateX"
当我们降级回 npm v4.2.0 或更低版本时,它会再次运行。自该版本导致中断对同一网络中另一台服务器的访问以来发生了什么?或者在 npm 5.x.x 及更高版本中引用同一网络中另一台服务器上的依赖项的方法看起来如何?
我们的私有模块位于我们网络中的服务器上。 Windows 上的所有服务器都是 运行。
我能找到的最简单的解决方法是使用安装的驱动器而不是服务器名称或 UNC 路径。
- 创建一个挂载的驱动器,如 G:,引用
serverName
。 更改所有私有模块 package.json 中的模块依赖关系。
"privateX": "file://G:/path/to/privateX"
这不是最好的解决方案,但它确实有效。适用于本地和全球安装。