Uber宣布开源Fusion.js,这是一个“基于插件的通用Web框架”。在发布说明中,Uber的高级软件工程师Leo Horie说到,Uber已经构建了上百个基于Web的应用,随着Web技术的快速变化和最佳实践的持续演化,让数百位Web工程师充分利用现代语言的特性,同时还要跟上Web平台的动态化发展确实是一项很大的挑战。而Fusion.js就是Uber为该问题所给出的解决方案。
\\在评估框架的时候,很关键的一点就是要理解框架的目标和目的,从而决定某个框架是否适合构建你的应用。Horie是这样描述Uber的现状的:
\\\\\需要改造陈旧的单体Web框架,解决数年的技术债所带来的挑战。但是,我们还希望让工程师能够继续使用他们所热爱的技术(如React和Redux),同时保持与Uber的应用健康监控基础设施的兼容性。
\
为了达成这一目标,Fusion.js能够解决Uber团队所识别出的如下痛点:
\\- 在服务器端渲染、代码拆分和模块热加载时,使用的工具需要配置以及样板代码\\t
- 抽象服务端渲染时所面临的挑战\\t
- 大型代码库的耦合\\t
- 当出现副作用时的测试\\t
- 单体框架的灵活性\
Uber团队在与已有的解决方案进行协同工作时遇到了挑战,在集成国际化和其他特性时也困难重重。Fusion.js还有一个主要目标就是避免单体的方式,从而保持bundle文件的体积比较小。
\\Horie这样向工程师们推荐Fusion.js:
\\\\\Fusion.js是一个基于MIT许可证的JavaScript框架,支持React和Redux等流行库,并提供了很多现代特性,如模块热加载、数据感知服务器端渲染和对bundle拆分的支持。
\
Fusion.js应用重点强调的特点是通用性和基于插件。Fusion.js有一个入口点文件,使得它能够在服务器端和客户端重用代码。Fusion.js的插件是通用的,这样的话就能让开发人员很容易实现类似的功能。
\\除了React和Redux之外,Fusion.js还利用Flow实现类型安全并使用Koa进行中间件管理。Fusion.js支持像Jest、Enzyme和Puppeteer这样的测试工具,同时还为开发人员提供了工具,以便于借助fusion-test-utils包来测试插件。
\\插件架构以及避免单体架构风格似乎在一定程度上与JavaScript最近的发展趋势背道而驰,最近的趋势是单个包(monopackage)。随着ES模块的广泛采用并且有webpack这样的工具来处理代码的分割,我们比以往更容易减少bundle的大小,而且无需将所有的包分离开来。但是,Uber所强调的更小的bundle体积是对其工程团队在构建复杂Web应用时所面临挑战的直接回应。
\\这个项目的最初反馈毁誉参半,有些工程师质疑为何采用Flow而不是TypeScript,有些人则不明白为何还需要另外一个框架。现在判断Fusion.js是否能够在Uber之外得到关注还为时尚早,但是看到有这样的组织发布对他们有益的基础设施还是很令人鼓舞的。
\\Fusion.js可以基于MIT许可证获取,他们鼓励工程师通过GitHub为该项目做出贡献。
\\ \\