在不同项目之间共享 node_modules
Posted
技术标签:
【中文标题】在不同项目之间共享 node_modules【英文标题】:Share node_modules between different projects 【发布时间】:2018-03-10 06:17:48 【问题描述】:我正在开发各种 Angular 2 项目,我想在多个项目之间共享 node_modules 文件夹。我想创建一个这样的结构:
MainFolder
- Project1
- Project2
- package.json
所以我将只有 1 个 package.json 用于所有项目。我的回答:有可能做到这一点吗?
如果可能的话,我必须和-g
共进午餐npm install
?
我无法理解-g
的工作原理。
有人可以指导我如何进行吗?
非常感谢
我忘了说我是用 angular-cli 构建项目的。
【问题讨论】:
你试过了吗? 我在 MainFolder 中尝试了 npm install -g 但要运行 Project1 我还需要在 Project1 文件夹中午餐 npm install 吗?因为我无法运行 Project1... 【参考方案1】:我为小型/学习/测试项目解决这个问题的方法是(我称之为)“git 项目”。基本上我通过 git 管理各种项目,并且只是“加载”我想要处理的项目。当然,如果您想同时访问多个项目,这是行不通的。
我喜欢为此目的使用 git 客户端,因为它更容易可视化我现有的“项目”。
所以我的工作流程是这样的......
-
创建我的主/基本文件夹。这将包含 git 存储库、单个 node_modules 文件夹以及所有项目应该通用的任何其他内容。
我创建了基本的 package.json 文件(使用
npm init
)。没有描述,什么都没有,只是基本的骨架 package.json 文件。 (但是,如果您知道您将在所有项目中使用某些包,您可以先 npm install 它们,因此它们将作为您的“基础”模块添加到 package.json。)
现在我将裸 package.json 检入 repo(以及您可能希望在所有项目中拥有的任何其他内容,但通常只是 package.json 文件)。这将是所有项目的基本起始分支。
一旦签入,我会在 git 存储库中创建一个分支。这将是“项目 1” - 或任何您想称呼它的名称。然后根据需要构建项目、安装模块、签入更改等。
当我想开始一个新项目时,我只需检查第一个基本项目(它只是一个空的或几乎是空的 package.json 文件)并从它做另一个分支。这将是我的第二个项目。
等等……
所以最重要的是,每个新的“项目”都将是 git repo 中的一个新分支,要创建一个新项目,只需切换回原始的准系统并从中创建一个新分支。
当然也可以在项目中创建分支。这都是关于命名约定的。例如,您可以在新项目分支前加上“P_”或“PROJECT_”等前缀,这样您就可以在 git 客户端中快速判断哪些分支是项目。如果您只需要现有项目中的新分支,当然可以使用不同的命名方案。基本上我就是这样处理的。
你可能不喜欢这个工作流程,但这样我就不需要全局安装包了。当我进行备份时,我可以简单地删除单个(可能很大)node_modules 文件夹。只需检查特定项目的分支并在其 package.json 上运行“npm install
”,即可重新安装所有与项目相关的模块。希望有道理。
【讨论】:
【参考方案2】:Here 是关于各种 npm 安装参数的文档
在全局模式下(即,将 -g 或 --global 附加到命令中),它 安装当前包上下文(即当前工作 目录)作为全局包。
-g根据环境安装位置可以找到here
实现所需的一种方法是为两个项目提供一个解决方案,并且每个项目路线都使用自己的lazy loaded module。
除非您有共享资源的特定业务需求,否则最好将每个项目与自己的资源和配置分开。
【讨论】:
【参考方案3】:-g 代表全局安装,即您安装的包将可用于所有应用程序。
为什么要共享 node_modules 和 package.json 文件?
为每个单独的项目将它们分开。如果你需要共享你的项目,你可以共享你的 package.json 而不是共享 node_modules 文件夹。
另外要指出的是,如果您通过列出它们的名称来手动安装包,那么您可以使用 -g(全局)标志,但如果您只使用 npm install
,那么您的包将不会作为全局包安装。
【讨论】:
我应该共享 node_modules 文件夹以避免在每个项目中都有这个文件夹。如果我将相同的 package.json 放在不同的项目中并运行 npm install 我会在每个项目中拥有相同的 node_modules 吗? 如果您在每个项目中运行 npm install,那么是的,每个项目中的 node_modules 都相同。但是,每个项目都应该有一个单独的 node_modules,就像您开始测试新事物一样,您必须为每个项目维护单独的 package.json。这是道德的方式 所以更好的方法是为每个项目保留一个 package.json 并在每个文件夹中启动 npm install,即使这会产生相同的 node_modules 文件夹。对吗? 是的,正确且合乎道德。并且每当您安装任何软件包时,npm 都会为它自己保存一个引用;因此,如果您遇到网络问题,您不需要互联网来为每个项目安装软件包;)【参考方案4】:如果它真的只是为了测试简单的应用程序,可以以某种方式重命名应用程序文件夹提供解决方案。它假定所有依赖项都是相同的,或者至少是所提供依赖项的一个子集。
【讨论】:
以上是关于在不同项目之间共享 node_modules的主要内容,如果未能解决你的问题,请参考以下文章
管理在不同 Xcode 项目之间共享的源文件的简单方法是啥?
如何在 ASP.NET MVC 中的 2 个不同项目/应用程序之间共享母版页?
如何在不同的解决方案之间共享相同的 Visual Studio 项目?不同的 app.config 和 settings.settings