Babylon.js的contributing要求

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要求挺有意思,学习一下。

一、黄金法则

  1. 不能添加会破坏向后兼容性的代码;
  2. 不能添加会减慢渲染过程的代码;
  3. 不能添加会使使用变得负责的代码;

向后兼容性

因为希望用户能信任babylon.js,所以第一黄金法则非常重要。当我们需要引入一些会破坏向后兼容性的东西时,我们知道这将意味着客户需要做一些工作才能兼容新的版本。因此,及时通过破坏兼容性可以更容易的完成某些开发,但我们不会这样做。

性能

Babylon.js是一个3D渲染引擎,因为需要仔细检查每一段代码,以定位性能瓶颈或卡顿的原因。使用更少的资源可以呈现更多的内容。

简约

开发人员应该更轻松的学习使用API。简单性且低门槛入门是每个API的必备功能。如果您当前的设计较为复杂,那从当前版本中删除,再深思熟虑下,花更多时间在下一版本中提供一个更好的设计。

二、PR请求

pull request时,应该检查编码准则,并仔细检查。

通过以下步骤,来验证您的PR:

  1. 本地运行npm run build:dev,不会报错;
  2. 确保所有公共函数及类均采用了JSDoc/TSDoc语法注释;
  3. 需要运行单元测试检查,npm run test:unit;

三、最终的目的思考

为了不让核心引擎膨胀,不让增加不需要或不必要的功能,以下是给babylon.js/core提交前需要考虑的问题:

  1. 我的功能是否属于框架库?
  2. 我们功能可以支持不同的应用程序使用吗?
  3. 此功能是否已被其它方式实现?
  4. 此功能是否属于常规的使用方法?

四、统一的命名规范

Babylon.js的代码,需要符合以下规范:

  1. 私有的变量需要采用下划线_开始命名,如_myVariable;
  2. 非静态的属性、方法、变量需要使用驼峰式命名法,如var myUberUserfulVariable;
  3. 静态方法必须使用Pascal命名(第一个单字母首字母采用大写,后续单字首字母亦用大写字母,例如FirstName,LastName),如BABYLON.Vector3.Project
  4. 及时代码只有一样,也应该使用{}大括号括起来;
  5. 大括号从同一行开始,在下一行结束;
  6. 每一个新文件仅能包含一个Class;
  7. 必须使用TypeScript提交pull request;