我想知道是否有办法将 package.json 文件的依赖项转移到不同的目录中。场景是这样的:
我有一个项目,正在使用 git 和 post-receive
钩子(Hook)进行部署。当我想要部署我的项目时,我将其推送到服务器上的裸 git 存储库,然后将存储库克隆到单独的文件夹中(从而使文件可用),运行 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/
对于拥有一个中央依赖目录来说,这实际上并不起作用。
我还发现了 1 个讨论使用符号链接(symbolic link)的问题。这将如何运作?
最佳答案
听起来您真正想要的是在构建服务器上有一个本地包缓存。 NPM already 就是这样做的。但是,默认情况下:
Commands that make non-essential registry requests (such as search and view, or the completion scripts) generally specify a minimum timeout. If the .cache.json file is younger than the specified timeout, then they do not make an HTTP request to the registry.
这不包括软件包安装。您可以通过执行以下操作来规避此问题:
npm --cache-min 9999999 install <package-name>
有few请求对此命令有一个更好的界面,因为这是一个非常常见的要求。
还有一些项目提供替代机制:
- https://www.npmjs.com/package/npm-cache - 提供在本地缓存包的替代命令
- http://mixu.net/npm_lazy/ - 实际上是一个内部包注册服务器
关于json - 有没有办法将 package.json 文件中的依赖项安装到不同的目录中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32015769/