有没有办法将package.json文件中的依赖项安装到不同的目录中?

我想知道是否有一个package.json文件的依赖关系的方式到另一个目录。 情景是这样的:

我有一个项目,我用git和post-receive hook进行部署。 当我想部署我的项目,我把它推到我的服务器上的裸git回购,然后克隆到一个单独的文件夹回购(从而使文件可用),运行npm install依赖项,运行构build(在这种情况下grunt ),将构build文件移动到由Web服务器托pipe的文件夹,覆盖任何较旧的文件,然后通过删除克隆的文件夹来清理它。

不幸的是,这也有消除node_modules文件夹的node_modules ,这意味着一个新的依赖关系必须安装在下一个版本,这需要时间,如果我试图快速部署。

我的问题背后的原因基本上是想知道是否有比我目前更优雅的解决scheme。 有没有办法,我可以安装依赖到我的服务器上的依赖关系目录,然后从那里运行所有的生成? 这样我就可以把所有的模块放在一个地方,而且我在服务器上运行的其他版本也使用这些包,同时也添加了他们需要的附加依赖。

迄今为止我的研究没有被certificate是成功的 – 我尝试了跑步

 npm install /some_folder --prefix /other_folder 

但是造成如下目录结构的负面影响:

 / ├── some_folder | ├── <various files> | └── package.json └── other_folder └── node_modules/ └── some_folder/ ├── <various files from first folder> ├── package.json └── node_modules/ 

这对于拥有一个中央的依赖关系目录来说真的不起作用。

我还发现有一个关于使用符号链接的问题。 这将如何工作?

它听起来像你真正想要的是在你的生成服务器上有一个本地包caching。 NPM 已经这样做了。 但是,默认情况下:

使非必要的registry请求(如search和查看,或完成脚本)的命令通常指定最小超时。 如果.cache.json文件比指定的超时小,那么它们不会向registry发出HTTP请求。

这不包括软件包安装。 您可以通过执行以下操作来避免这种情况:

 npm --cache-min 9999999 install <package-name> 

有很less的要求有一个更好的接口,因为这是一个相当普遍的要求。

还有一些项目提供了替代机制: