繁体   English   中英

有没有一种方法可以将package.json文件中的依赖项安装到其他目​​录中?

[英]Is there a way to install dependencies from a package.json file into a different directory?

我想知道是否有一种方法可以将package.json文件的依赖项放入另一个目录中。 场景是这样的:

我有一个正在使用git和post-receive hook部署的项目。 当我想部署项目时,我将其推送到服务器上的裸git repo,然后将其克隆到一个单独的文件夹中(从而使文件可用),运行npm install来安装依赖项,运行构建(在在这种情况下为grunt ),将构建文件移动到Web服务器托管的文件夹中,覆盖所有较旧的文件,然后通过删除克隆文件夹来对其进行清理。

不幸的是,这还具有清除node_modules文件夹的node_modules ,这意味着必须在下一个构建中安装一组新的依赖项,如果我要快速部署,则需要一些时间。

我的问题背后的原因本质上是想知道是否有比我目前更优雅的解决方案。 有没有一种方法可以将依赖项安装到服务器上的依赖项目录,然后从那里运行所有构建? 这样一来,我可以将所有模块都放在一个位置,并在服务器上运行的其他内部版本也使用这些软件包,同时还要添加它们所需的任何其他依赖项。

到目前为止,我的研究尚未证明是成功的-我尝试过跑步

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/

对于具有中央依赖项目录来说,这实际上是行不通的。

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

听起来您实际上想要的是在构建服务器上具有本地程序包缓存。 NPM 已经做到了。 但是,默认情况下:

发出非必需的注册表请求的命令(例如搜索和查看或完成脚本)通常指定最小超时。 如果.cache.json文件小于指定的超时时间,则它们不会向注册表发出HTTP请求。

这不包括软件包安装。 您可以通过执行以下操作来规避此问题:

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

很少有人要求对此命令有一个更好的接口,因为这是很常见的要求。

也有几个项目提供替代机制:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM