• 在业务开发中实践 monorepo

    前言

    有幸参加 9 月 21 日成都举办的第五届FEDAY,其中,工程师王泽的《框架开发中的基础设施搭建》,重点介绍了白鹭引擎最新产品 Egret Pro 在 monorepo 方面的工程实践。不止白鹭引擎,目前很多大型的开源库项目,例如 vue,babel,react 等等,都采用 monorepo 去管理代码。

    其实,不止是大型类库,monorepo 也适用于我们实际的业务开发场景。

    我们通常都会将这些库拆分成多个,创建 git 仓库,打包上传 npm,这样貌似没有什么问题。

    但是当库与库之间产生依赖的时候,问题就暴露出来,修改一个库,依赖它的库也要相应更新版本号,重新发包。当库越来越多,关系越来越复杂,这个维护的过程就相当头痛。

    这个时候,Lerna 正好符合这样的场景。

  • 关于面向对象,原型链,继承

    关于 JS 如何实现面向对象


    先看看官方如何解释:

    https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Inheritance_and_the_prototype_chain >

    对于使用过基于类的语言 (如 Java 或 C++) 的开发人员来说,JavaScript 有点令人困惑,因为它是动态的,并且本身不提供一个 class 实现。(在 ES2015/ES6 中引入了 class 关键字,但那只是语法糖,JavaScript 仍然是基于原型的)。

    当谈到继承时,JavaScript 只有一种结构:对象。每个实例对象( object )都有一个私有属性(称之为 proto )指向它的构造函数的原型对象(prototype *)。该原型对象也有一个自己的原型对象( *proto ) ,层层向上直到一个对象的原型对象为 null。根据定义,null 没有原型,并作为这个原型链中的最后一个环节。

    几乎所有 JavaScript 中的对象都是位于原型链顶端的 Object 的实例。

    尽管这种原型继承通常被认为是 JavaScript 的弱点之一,但是原型继承模型本身实际上比经典模型更强大。例如,在原型模型的基础上构建经典模型相当简单。