如何将 npm link 与只能通过 ssh 访问的 git 存储库一起使用

How to use npm link with git repositories only accessible with ssh

我正在尝试使用一些支持库开发节点应用程序。这些项目都位于通过 ssh 访问的私有存储库中。用户名和密码身份验证不是一个选项。

到目前为止,我一直在将 git 存储库 url 添加到 package.json

"dependencies": {
  "my-library":"git+ssh://git@repo-url:repo-name.git#master"
},

这不是很好,因为它不会导致可重现的构建,这意味着同时开发客户端代码和库需要推动每一个小的变化。

npm link 似乎是解决此问题的理想选择,但库目录中的 运行ning npm link 会产生以下错误:

~/mylibrary$ npm link
npm ERR! Error: EACCES, unlink '/usr/local/lib/node_modules/mockelganger'
etc etc

很正常,它正在尝试修改系统全局位置。

~/mylibrary$ sudo npm link
|it@repo-url's password: -

那个“|”在哪里遮挡 "g" 的是一个动画微调器。我确定这就是 git 在我尝试访问存储库时所做的事情;无论出于何种原因,它都无法看到我的 ~/.ssh/id_rsa 或我的 ssh 代理。

我想我可以通过弄清楚如何 运行 root 的 ssh-agent 来解决这个问题,但是 npm link 甚至需要从 git。它只是在修改我的计算机的配置,所以它为什么要访问网络?这让我觉得我做错了什么。

解决方案是将 npm 前缀更改为不需要 root 权限的地方。

npm config set prefix ~/npm

如果您要安装 CoffeeScript 等可执行文件,请记得将 ~/npm 添加到路径中。