获得徽章 0
- React v16.7发布了,可是没有预期的Hooks正式发布,只是包含一些bugfix。没有就没有吧,这次没有等下次,不过,我们依然从React的声明中看到一些很有启发性的观点。
我们知道,根据语义化版本(semantic versioning)的规则,版本分为major、minor和patch部分,假设目前React版本是v16.6.0,现在有了一些代码改变要发布,如果有breaking change,那就应该改变major,也就是v17.0.0;如果只是增加新的功能,那就改变minor,也就是v16.7.0;如果只是fix bug,不改变原有行为,那就只需要改变patch,也就是发布v16.6.1。
既然这次只是bugfix,为什么React要发布v16.7.0,而不只是发布v16.6.1呢?
因为React认为只有很小的代码改变才能当做patch发布,如果一个改变虽然只是fix bug,但是牵涉的代码改变很多,依然应该当做minor版本发布。
可以说,React的这种观点非常地正!
这世界上有很多项目的package.json里类似这么写的"react": "~16.6.0",这代表了对一个小版本的信任,因为这会匹配所有16.6.x版本,所以,一定要确保patch非常非常非常非常非常靠谱,绝对不要引入新的bug。即使我们的代码有100%的代码覆盖率,即使我们有严格的代码审核流程,即使我们在发布之前做足dogfooding,依然不能完全杜绝bug,因为每一行代码的改变都可能引入bug,如果代码改变太多,我们就不应该冒险当做一个patch发布,一旦有意外bug引入,这会毁了很多项目的。
React的确有一个很严谨的开发团队,值得我们学习。展开评论24 - 通过这篇文章你会了解到这些问题的答案:
为什么你自己写的组件要首字母大写?
为什么能在js文件里写html的语法?
为什么jsx的方式要比模板强?
为什么jsx必须要有一个顶层节点?
为什么jsx中不能用class要用className?
为什么react-dom要单独作为一个库?
为什么我即使没在这个js中用到React也需要引入React这个库?展开16 - 1. 关于是否在结尾加分号,取决于团队习惯,保持一致(如用eslint规则)最重要。为了减少读代码的干扰,我们是不加,同时留心极少数情况(尤大也专门写过Hacking Semicolons
slides.com)
2. 关于缩进,我们用2 空格,避免在gitlab上review code的时候,代码缩进太狠造成阅读困难。
3. 关于是用LESS还是SCSS,我们用LESS,因为node-sass是基于LibSass的,而我们的内网开发机器安装便宜LibSass有困难,所以就选了基于js的LESS。
4. 关于是用styled-jsx 还是 独立的 .css/.less/.scss,我们是 styled-jsx + 独立.less,styled-jsx是为了当只需要给UI微调或者动态style的时候用,这时没必要再管理一个独立的.less文件。
5. 关于是否用BEM css,我们用,且完全按照官方的命名规范,好处是结构化的名字好找。同时且在webpack里给每个className加上hashcod,避免某些冲突(比如ant design 的popover是挂在body上的,多个时就冲突了)。
总之这种非核心的多选情况,以服务实际项目为目标,团队内统一即可,真没必要反复纠结于此,团队的高质量产出才是最应该花时间的展开216