【问题标题】:How do you manage versioning of dependencies, in nodejs?您如何在 nodejs 中管理依赖项的版本控制?
【发布时间】:2016-12-01 17:16:51
【问题描述】:

我们一直是一家 Windows 商店,主要依靠 Visual Studio 作为我们的 IDE 和构建工具。我们已经开始探索使用 Angular 和 node,以及 angular-cli。

我们有一个项目依赖于“angular-cli”:“1.0.0-beta.10”。我试图让它在一台新机器上构建。

我安装了 nodejs,然后使用 npm 全局安装了 angular-cli:

npm install -g angular-cli

然后我尝试进行构建:

ng build

我遇到了一个错误:

It seems like you're using a project generated using an old version of the Angular CLI.
The latest CLI now uses webpack and has a lot of improvements including a simpler
workflow, a faster build, and smaller bundles.

To get more info, including a step-by-step guide to upgrade the CLI, follow this link:
https://github.com/angular/angular-cli/wiki/Upgrading-from-Beta.10-to-Beta.14

我所做的就是卸载 angular-cli,然后安装 beta.10 版本

npm uninstall -g angular-cli
npm install -g angular-cli@1.0.0-beta.10

之后,一切正常。

很遗憾,这不是解决方案。

我们最终会有多个项目使用节点包,我们需要它们能够同时运行,而无需卸载和重新安装全局包。

而且我们需要能够在我们的构建机器上自动运行构建,而不需要 RDP 进入构建机器来搞乱安装了哪些节点包。

也就是说,如果我有三个使用 angular-cli@1.0.0-beta.10 的项目,我希望这三个项目都能在任何开发人员机器上工作,并且构建机器将能够检查任何三个项目中的一个,并成功构建它们。

如果我更新一个使用 beta-12,另一个使用 beta-14,我希望能够将它们提交给版本控制,并且构建机器能够检查三个中的任何一个并且仍然无论他们使用哪个版本,都能够构建它们。

我认为在 package.json 中跟踪本地依赖项并将本地副本存储在 node_modules 中的整个想法是避免依赖于全局安装的包。

人们通常如何处理这个问题?

有没有一种方法可以配置 angular-cli,使其不依赖于全局安装?

还有其他我可能会遇到类似问题的软件包吗?有什么方法适用于他们中的任何一个吗?

【问题讨论】:

  • 欢迎来到node.js中的版本控制/依赖地狱
  • 我不认为这是一个节点/npm 问题。这似乎是您的团队依赖某些全球 CLI 工具的问题。这类似于您下载了最新版本的 Visual Studio,但无法从 VB6 编译解决方案。不要使用 CLI,或在构建机器上使用相同版本的 CLI。
  • @BlakeH 就在钱上。 CLI 是 Angular 开发的一个很好的工具,但就像 Angular 2 项目依赖于某个版本的各种包一样,工具依赖于许多特定的包版本。这个 CLI 作为 Angular 的官方工具,也促使开发人员在所有项目中保持最新版本的自身和 Angular 框架。
  • 当您有几百个项目时,如果您已经更新了其中一个上的工具,那么您将不得不接触每个项目的想法是荒谬的。我们的构建机器上安装了VS2003、VS2005、VS2010、VS2010、VS2012、VS2013和VS20153,具体用于哪个项目由项目决定。
  • 假设安装了全局版本并在路径中应该调用本地版本。不幸的是,angular-cli global 是 beta.14 而本地是 beta.10,这不起作用。卸载全局版本,直接访问本地即可。

标签: angularjs node.js angular-cli


【解决方案1】:

Angular-CLI 可以运行,全局 ng 命令使用每个项目的本地安装版本。可以使用命令./node_modules/.bin/ng访问此本地版本

我建议卸载您拥有的全局 CLI,并花时间修改您的 package.json scripts 以引用本地 CLI 安装而不是全局 ng。这是我在 Jenkins 服务器上处理各种 CLI 的方法。

关于这一点,我强烈建议您按照说明从 Beta.10 迁移到 Beta.14 (https://github.com/angular/angular-cli/wiki/Upgrading-from-Beta.10-to-Beta.14),如果您可以忍受对 WebPack 的更改。任何使用 CLI Beta.14 或更高版本的项目都可以升级到最新的 beta,只需卸载 CLI,重新安装它,然后运行 ​​ng initDiff [d] 任何您修改过的文件!)来更新样板。

【讨论】:

    【解决方案2】:

    将 typescript 组件 html 和 css/scss 文件复制并粘贴到新版本中,甚至不值得弄乱这些东西的核心版本。

    请记住,您可能会看到导入是灰色的,并且现在将 app.module.ts 作为其核心文件添加到我们的每个项目中都需要相同的导入。

    【讨论】:

      猜你喜欢
      • 2013-05-19
      • 2023-03-31
      • 2019-12-29
      • 2021-11-22
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 2013-01-24
      相关资源
      最近更新 更多