使用 CI 为 react-native、typescript、nodejs 设置合适的开发环境

Setting up a proper dev environment with CI for react-native, typescript, nodejs

不幸的是,我们有不同 nodejs 版本的项目。我不确定这是否像 java 我可以安装多个 jdks(安装多个 nodejs)并且每个项目通过配置文件神奇地使用正确的版本?此外,教程中的大多数命令在安装工具和库时都不包括版本号

来自 gradle 和 gradle 包装器,团队中的每个人都使用 build.gradle 文件中定义的工具和库版本,这对我来说很奇怪。在 gradle 世界中,团队中的每个人都使用完全相同的 gradle 版本(gradle 本身确保如果一个人在 repo 中升级它,每个人都会得到升级并保持同步同一个版本)。然后是 plugins/tools 并定义了那些版本,然后定义了库和那些版本。

理想情况下,我们在 repo 中升级任何这些 + 对升级的任何修复,所以在结帐时,开发人员开始使用新工具 + 新的 *.tsx 文件,因此它是无缝的,就像 gradle世界。在gradle,我升级了

并检查所有作为一个单元,以便任何签出的开发人员一起使用所有正确的版本。我希望我们的 ios/android 移动项目或尽可能接近它。

我以前破解过一些东西,比如将 'ant' 安装到 git 存储库中,这创造了奇迹(尽管它是如此丑陋的破解)并且每个人都在存储库中使用该工具而不是他们 OS 上的那个。也许有办法做到这一点?

一个带有二进制文件的臃肿回购是值得的,它可以防止人们随着时间的推移升级库而出现版本兼容性问题。不仅如此,我们发现工具错误更容易追踪,因为我们可以恢复回购。不仅如此,我们可以重现 1 年前的构建形式,因为工具已恢复,而由于所有更改,今天的 npm 工具无法构建 1 年前的东西。优点越积越多,我都记不起来了

通过 bootstrap 之类的 gradle 包装器或完全成熟的东西从回购中获得工具 运行 通常是最好的选择,直到完全成熟的东西真的很臃肿但即便如此,将其锁定到另一个工具回购上的散列可能会更好

任何想法都欢迎在这里让我的团队使用所有相同的工具(对于从另一个项目加入公司或团队的人来说非常有用,而且不必安装太多)。

谢谢, 院长

Typescript 和库应该通过删除 package.json 中的任何插入符和波浪号并指定确切的版本来处理。

其余的低开销可能是shell脚本和私有包回购。您可以托管要在内部安装的版本,并通过 cURL 获取所有版本。

或者您可以在您的 npm pre-install 中添加一些简单的脚本,例如 nvm use 12.2.1 应该通过错误消息引导用户安装 nvm 并使用正确的版本。