【问题标题】:How to move npm node_modules folder cross-platform?如何跨平台移动 npm node_modules 文件夹?
【发布时间】:2013-10-11 12:14:16
【问题描述】:

我的客户有一个非常特殊的要求。我们使用 npm 安装 karma 和 phantomjs 已经有一段时间了。一切正常,直到我们必须将所有内容从云端迁移到内部基础设施。现在事情变得复杂了。内部基础设施无法访问互联网,因此我们不能再使用 npm 来解决依赖关系。我们尝试将 node_modules 文件夹 dev 机器移动到内部基础设施机器。它不起作用,因为开发机器是 OSX 和 Windows,服务器是 Centos,而 phantomjs 是特定于操作系统的,但 npm 能够锻炼版本控制。我们有哪些选择来解决依赖关系?我刚刚得知 node_modules 名称不能更改。我正在考虑签入操作系统特定的 node_modules 但这不起作用,因为 npm 只查找 node_modules 文件夹。

当我试图在 Centos 中使用 OSX 的 node_modules 时,我遇到了与该线程 PhantomJS Crash - Exit Code 126 相同的错误。

【问题讨论】:

  • 为什么不将项目安装在具有此操作系统的 VM 中?
  • 这也是一个选项。但我只是想听到更多来自社区的信息。顺便谢谢你的建议。
  • VM 并不是一个完全的解决方案。我使用 docker 也有同样的问题。

标签: node.js operating-system continuous-integration npm


【解决方案1】:

在第一个操作系统(即 OSX)上安装所有依赖项,假设您拥有包含所有依赖项的 package.json。

npm 安装

将创建的 npm_modules 重命名为 npm_modules_mac

针对不同的操作系统(即 Windows)重复上述步骤,将 node_modules 重命名为 node_modules_windows

在目标操作系统上,将上面创建的文件夹移动到您的应用文件夹,创建符号链接(node_modules),它将指向适当的文件夹(npm_modules -> 在 OSX 中为 npm_modules_mac)

【讨论】:

  • 这将不允许您并行运行它们,因为您只能使用一个符号链接。
  • 您能否解释一下,如何创建动态符号链接?
  • 当然,它在 mac/linux 中是 ln -s /path/to/file /path/to/symlink。在 Windows 10 中,您可以使用 mklink "path" "new path"
【解决方案2】:

您为什么不直接托管您的私人注册表?您可以将注册表存储在内部基础架构中。

事实上的注册表是@isaacs 自己的 npmjs.org。可以在这里找到:

https://github.com/isaacs/npmjs.org

但是,它确实需要使用 CouchDB 作为数据库,这可能会让人望而生畏。有一些替代方法可以让您执行此操作。例如,雷吉:

https://github.com/mbrevoort/node-reggie

【讨论】:

    猜你喜欢
    • 2013-08-04
    • 2016-01-03
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    相关资源
    最近更新 更多