高级概念
代码共享
扩展单个应用程序之外的代码库...
JavaScript 提供了巨大的可扩展性机会,如果架构得当。在这个部门中经常出现的一个关键词是“代码共享”。多年来,围绕着 NativeScript 的 JavaScript 可扩展性出现了一些经验教训。
NativeScript TSC 关于良好代码共享的 5 个基本教训:
- 如果你能够轻松地与其他范式、其他学科、甚至其他运行时共享你的代码,那么你就拥有一个良好的代码共享方法,它将继续为你和你的团队带来快乐。没有开发人员或团队会主动进行代码共享,希望自己将来陷入困境。你总是希望现在共享代码,以便将来更轻松地维护和扩展代码。
- 良好的代码共享方法应该自然地融入到良好支持的社区标准中,并且不需要任何额外的构建工具来支持共享性。换句话说,它应该牢固地立足于其所用语言的范围。
- 良好的代码共享方法不应该为了共享性而引入新的文件扩展名(框架自然支持的扩展名除外)。所有团队都通过文件夹自然地组织代码,良好的代码共享方法应该与之匹配,避免新的文件扩展名和超出一般代码组织的概念。
- 良好的代码共享方法应该清楚地识别部署/分发线以及不同的平台分离,允许各种共享代码段具有明确的指定部署目标,允许团队根据需要控制自己的复杂构建管道。此外,共享代码应该存在于一个经过深思熟虑的组织结构中,该结构支持扩展和适应未来的需求,而不是使用共享代码的部署目标。
- 在 NativeScript 观点的特定范围内,JavaScript 是通用语言,它提供了有效且负责任地共享代码的机会。一种基于 JavaScript(以及 TypeScript)优势的基本方法是一种良好的代码共享方法。
说明:
框架通常是“特定领域的”。编程语言通常相反,或者至少更广泛地适用于更广泛的领域问题集。良好的代码共享方法围绕编程语言而不是框架进行。
如果“代码共享解决方案”由框架维护,那么通常意味着存在内在的偏差,它将“可共享性”与框架交织在一起,即使不是故意的,这也是不可避免的。这违反了良好代码共享方法的第一条规则。
代码共享解决方案
这里有一些 **代码共享** 解决方案,每个都有其优缺点。
Nrwl Nx DevTools 与 @nativescript/nx
优点
- 它以 JavaScript/TypeScript 为中心(上面第 1 和第 5 条教训)
- 使用标准构建工具(如 TypeScript 或 webpack)构建代码(上面第 2 条教训)
- 无需处理自定义文件扩展名(上面第 3 条教训)
- Nx 清晰地将“应用程序”和“库”分开,识别消费共享代码“库”的部署/分发目标“应用程序”(上面第 4 条教训)
缺点
- 如果你不习惯一般的 Nx 实践,则学习曲线很陡峭
Nrwl Nx DevTools 与 @nstudio/xplat
优点
- 它以 JavaScript/TypeScript 为中心(上面第 1 和第 5 条教训)
- 使用标准构建工具(如 TypeScript 或 webpack)构建代码(上面第 2 条教训)
- 无需处理自定义文件扩展名(上面第 3 条教训)
- Nx 清晰地将“应用程序”和“库”分开,识别消费共享代码“库”的部署/分发目标“应用程序”(上面第 4 条教训)
- 它建立在 @nativescript/nx 之上,以进一步扩展它跨更多范式,因此,如果你已经在使用 @nativescript/nx 在 Nx 中工作,那么它将是一个自然的扩展。
- xplat 提供了意见性架构,这有助于避免来自跨平台混合物中实际开发中获得的经验教训的常见陷阱。
缺点
- 如果你不习惯一般的 Nx 实践,则学习曲线很陡峭
- 如果你以前没有开发过大型代码库中的应用程序,则学习曲线很陡峭。
- 理解提供的架构的 基本原理
Yarn 工作区
优点
- 它以 JavaScript/TypeScript 为中心(上面第 1 和第 5 条教训)
- 使用标准构建工具(如 TypeScript 或 webpack)构建代码(上面第 2 条教训)
- 无需处理自定义文件扩展名(上面第 3 条教训)
- 可以链接/共享依赖项
缺点
- 你必须自己进行组织结构,这会导致跨平台混合物中的常见陷阱
- 没有开箱即用的部署/分发目标设置来识别应用程序目标与共享代码
Lerna
优点
- 它以 JavaScript/TypeScript 为中心(上面第 1 和第 5 条教训)
- 使用标准构建工具(如 TypeScript 或 webpack)构建代码(上面第 2 条教训)
- 无需处理自定义文件扩展名(上面第 3 条教训)
缺点
- 你必须自己进行组织结构,这会导致跨平台混合物中的常见陷阱
- 没有开箱即用的部署/分发目标设置来识别应用程序目标与共享代码
- 它通常针对开源库管理,因此通常没有额外的“工作区管理”有用工具