Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法将package.json文件中的依赖项安装到其他目录中?_Json_Node.js_Git - Fatal编程技术网

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

有没有办法将package.json文件中的依赖项安装到其他目录中?,json,node.js,git,Json,Node.js,Git,我想知道是否有办法将package.json文件的依赖项放到另一个目录中。情景是这样的: 我有一个使用git和post-receivehook部署的项目。当我想要部署我的项目时,我将其推送到我服务器上的裸git repo,然后将repo克隆到一个单独的文件夹中(从而使文件可用),运行npm install安装依赖项,运行构建(在本例中为grunt),将构建文件移动到web服务器托管的文件夹中,覆盖所有旧文件,然后通过删除克隆文件夹来清理该文件夹 不幸的是,这还有一个副作用,那就是清除了node_

我想知道是否有办法将package.json文件的依赖项放到另一个目录中。情景是这样的:

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

不幸的是,这还有一个副作用,那就是清除了
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/
/
├── 一些文件夹
|  ├── 
|  └── package.json
└── 其他文件夹
└── 节点单元/
└── 一些文件夹/
├── 
├── package.json
└── 节点单元/
如果有一个中心依赖目录,那就不太管用了


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

听起来您真正想要的是在构建服务器上有一个本地包缓存。NPM就是这样做的。但是,默认情况下:

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

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

npm --cache-min 9999999 install <package-name>
npm--缓存最小值9999999安装
有人要求这个命令有一个更好的接口,因为这是一个非常常见的要求

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

  • -提供另一个在本地缓存包的命令
  • -实际上是一个内部包注册表服务器

缓存软件包是否能从根本上避免等待后续的
npm安装?如果我的问题不够清楚,我只是想避免每次都安装一组新的依赖项,因为整个构建环境在构建结束时都会被破坏,这样下次克隆repo时就不会有冲突。我的假设是,最好的修复方法是将node_modules文件夹放在其他位置,这样它就不会被构建文件破坏,然后可以再次用于后续构建。是的,没错。缓存的优点是它使构建过程透明。例如,如果包不在缓存中,则使用
--cache min
开关,
npm install
仍将调用注册表。这是你不想自己管理的事情,因为它增加了构建的复杂性。真糟糕!谢谢你的帮助。我最后签出了
npm cache
来缓存我的包,它工作得很好。我的构建时间现在比以前快了20秒。标记为正确:)