2016-12-01 132 views
0

我们一直是Windows商店,主要依靠Visual Studio作为我们的IDE和构建工具。我们已经开始探索使用Angular和node以及angular-cli。如何在nodejs中管理依赖关系的版本控制?

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

我安装的NodeJS,然后做了一个全球的角度,CLI的使用NPM安装:

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 [email protected] 

之后,事情工作得很好。

不幸的是,这不是一个解决方案。

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

而且我们需要能够在我们的构建机器上自动运行构建,而不必将RDP加入构建机器中,以便弄清楚安装哪个节点包。

也就是说,如果我有三个使用[email protected]的项目,我希望所有三个项目都可以在任何开发者机器上工作,并且构建机器将能够检出三个项目中的任何一个,并成功构建它们。

如果我更新一个使用beta-12,另一个使用beta-14,我希望能够将它们提交到版本控制,并且让生成机器能够检出三个中的任何一个,仍然能够构建它们,而不管它们使用哪个版本。

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

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

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

是否还有其他可能遇到类似问题的软件包?有没有一种方法可以用于其中任何一种方法?

+0

欢迎来到'node.js'中的版本控制/依赖项地狱 –

+0

我不认为这是一个node/npm问题。这似乎是您的团队依赖于某种全球CLI工具的问题。这与您下载最新版本的Visual Studio并且无法从VB6编译解决方案类似。不要使用CLI,或在构建机器上使用相同版本的CLI。 – BlakeH

+1

@BlakeH对钱的权利。 CLI是Angular开发的一个很好的工具,但是和Angular 2项目一样,依赖于某个版本的各种软件包,工具依赖于很多特定的软件包版本。作为Angular的官方工具,此CLI还推动开发人员在所有项目中保留最新版本的自身和Angular框架。 – gelliott181

回答

2

Angular-CLI可以和全局的ng命令一起运行,每个项目都有本地安装的版本。这个本地版本可以使用以下命令./node_modules/.bin/ng

我建议卸载全球CLI你和花时间来修改你的package.json scripts引用本地CLI安装,而不是全球ng访问。这是我在Jenkins服务器上处理各种CLI的方法。

在该说明中,如果您能够对WebPack进行更改,我强烈建议遵循从Beta.10迁移到Beta.14(https://github.com/angular/angular-cli/wiki/Upgrading-from-Beta.10-to-Beta.14)的说明。任何使用CLI Beta.14或更高版本的项目都可以升级到最新的测试版,只需卸载CLI,重新安装,然后运行ng initDiff [d]任何已修改的文件!)来更新样板。

0

复制&将打字稿组件html和css/scss文件粘贴到一个新的构建中,它甚至不值得去混淆这些东西的核心构建。

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