如何在不同平台上移动npm的node_modules文件夹?

4
我有一个非常特殊的客户需求。我们一直使用npm安装karma和phantomjs已经相当长一段时间了。一切正常,直到我们不得不将所有东西从云端移动到内部基础设施时,情况变得复杂起来。现在事情变得复杂了。内部基础架构没有互联网访问权限,所以我们不能再使用npm解决依赖问题了。我们尝试将node_modules文件夹从开发机器移动到内部基础架构机器。这并没有奏效,因为开发机器是OSX和Windows,而服务器是Centos,phantomjs是特定于操作系统的,但npm能够解决版本控制的问题。我们有哪些选项可以解决依赖关系?我刚学会node_modules名称不能更改。我正在考虑检查特定于操作系统的node_modules,但这行不通,因为npm只查找node_modules文件夹。
当我试图在Centos中使用来自OSX的node_modules时,我遇到了与此主题PhantomJS Crash - Exit Code 126相同的错误。

为什么不在虚拟机上安装这个操作系统来运行你的项目呢? - gustavohenke
这也是一个选项。但我只想听听社区的更多意见。顺便感谢您的建议。 - toy
VM并不是一个完美的解决方案。我使用Docker,但仍然遇到了同样的问题。 - N0mi
2个回答

4

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

npm install

将创建的npm_modules重命名为npm_modules_mac

为不同的操作系统(如Windows)重复以上步骤,将node_modules重命名为类似node_modules_windows的名称。

在目标操作系统上,将以上创建的文件夹移动到您的应用程序文件夹中,并创建符号链接(node_modules),该符号链接将指向相应的文件夹(npm_modules-> npm_modules_mac在OSX中)。


2
这将不允许您并行运行它们,因为您只能有一个符号链接。 - sorin
请问您能否详细解释一下如何创建动态符号链接? - N0mi
在Mac/Linux中,可以使用ln -s /path/to/file /path/to/symlink来创建符号链接。在Windows 10中,您可以使用mklink "path" "new path" - Andrei Karpushonak

0

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

事实上,@isaacs自己的npmjs.org是默认的注册表。您可以在此处找到它:

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

这确实需要使用CouchDB作为数据库,然而这可能有些令人望而生畏。但是有一些替代方案可以让你做到这一点,例如Reggie:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接