如何使用只有ssh可访问的git存储库的npm链接

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

到目前为止,我一直在把git仓库url添加到package.json中

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

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

npm link似乎是解决这个问题的理想之选,但是在库目录中运行npm链接会产生以下错误:

 ~/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”是一个animation微调。 我已经确定,当我尝试以路由的方式访问存储库时,这就是git所做的事情; 无论出于什么原因,它无法看到我的~/.ssh/id_rsa或我的SSH代理。

我想我可能可以通过计算出如何为root运行ssh-agent来解决这个问题,但是对于我来说, npm link甚至需要从git读取数据才是有意义的。 它正在修改只有我的电脑的configuration,所以它为什么要访问networking? 这让我觉得我在做别的事情。

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

 npm config set prefix ~/npm 

请记住,如果您安装了诸如CoffeeScript的可执行文件,请将~/npm添加到path中。