https://github.com/BabylonJS/Babylon.js/blob/master/contributing.md https://doc.babylonjs.com/contribute/toBabylon/approvedNamingConventions https://doc.babylonjs.com/contribute https://doc.babylonjs.com/contribute/toBabylon/matForMatLibrary
Babylon.js的Contributing要求挺有意思,学习一下。
一、黄金法则
- 不能添加会破坏向后兼容性的代码;
- 不能添加会减慢渲染过程的代码;
- 不能添加会使使用变得负责的代码;
向后兼容性
因为希望用户能信任babylon.js,所以第一黄金法则非常重要。当我们需要引入一些会破坏向后兼容性的东西时,我们知道这将意味着客户需要做一些工作才能兼容新的版本。因此,及时通过破坏兼容性可以更容易的完成某些开发,但我们不会这样做。
性能
Babylon.js是一个3D渲染引擎,因为需要仔细检查每一段代码,以定位性能瓶颈或卡顿的原因。使用更少的资源可以呈现更多的内容。
简约
开发人员应该更轻松的学习使用API。简单性且低门槛入门是每个API的必备功能。如果您当前的设计较为复杂,那从当前版本中删除,再深思熟虑下,花更多时间在下一版本中提供一个更好的设计。
二、PR请求
pull request时,应该检查编码准则,并仔细检查。
通过以下步骤,来验证您的PR:
- 本地运行npm run build:dev,不会报错;
- 确保所有公共函数及类均采用了JSDoc/TSDoc语法注释;
- 需要运行单元测试检查,npm run test:unit;
三、最终的目的思考
为了不让核心引擎膨胀,不让增加不需要或不必要的功能,以下是给babylon.js/core提交前需要考虑的问题:
- 我的功能是否属于框架库?
- 我们功能可以支持不同的应用程序使用吗?
- 此功能是否已被其它方式实现?
- 此功能是否属于常规的使用方法?
四、统一的命名规范
Babylon.js的代码,需要符合以下规范:
- 私有的变量需要采用下划线_开始命名,如_myVariable;
- 非静态的属性、方法、变量需要使用驼峰式命名法,如var myUberUserfulVariable;
- 静态方法必须使用Pascal命名(第一个单字母首字母采用大写,后续单字首字母亦用大写字母,例如FirstName,LastName),如BABYLON.Vector3.Project
- 及时代码只有一样,也应该使用{}大括号括起来;
- 大括号从同一行开始,在下一行结束;
- 每一个新文件仅能包含一个Class;
- 必须使用TypeScript提交pull request;