首发知乎: https:zhuanlan。zhihu。comp444556803 注:以下只是个人比较熟悉的部分,在浩瀚的前端世界,只是沧海一粟。MonorepoMonorepo成标配,pnpm会有更广泛的应用。 Whyshouldweusepnpm? https:www。kochan。ionodejswhyshouldweusepnpm。htmlwebstorm、vscode对monorepo更好的支持。现在的混合技术栈多少支持有一些问题。例如在webstorm里,一个目录的linter,使用eslint还是用deno的lint,还是其他的lint,是比较难配置的。例如在webstorm里,一个目录的ts语言服务,是用tsc还是deno。简单说以monorepo的一个子目录去选择对应的环境配置,是一个需求。TypeScript越来越多的项目选择TypeScript。TypeScript帮助JavaScript世界的整体编程能力往前走了一大步,怎么感谢AndersHejlsberg都不过分。他已经六十多了,还在写代码。DenoDeno开始在cli脚本和serverless方面展露头脚。Deno在传统生产项目上和Node仍然不会有太大的冲突。但是Deno在用TS写脚本方面,对比Node。js是有优势的。这一点优势应该最大化利用。Deno的依赖是不会污染Npm的,因为本身和NPM正交。随着项目的复杂,没人希望污染主项目。实际上,Deno非常适合把开发依赖都控制起来。Deno非常适合制作cli,且用cli来抹平NPM和Deno世界的最后一公里。虽然目前Deno的swc有各种问题,使用bundlecompile目前还有很多问题。Deno和Node。js世界开始融合。实际上,现在一大不太好融合的点,反而是Node。js的ESM问题。理论上ESM以后,一份TypeScript代码同时对Node。js、deno、browser变的简单了。随着Deno1。0的API稳定,会产生一些Deno和Node的兼容层项目产生。实际上就是把双方的API做一个映射。如果有了这个兼容层,在完全使用ESM的情况下,主要的区别就可以慢慢退化到项目入口的包管理方式NPM是package。jsonDeno是importmap和手动声明httpimport实际上,还有一些区别Deno的TypeScript的版本,实际总比流行版本慢一些,且参数是主TypeScript的参数的一个子集,且一些参数不能更改。Deno试图把一个编译型语言TypeScript变成一个像JavaScript一样的即时解释型语言,但是TypeScript写的复杂了,编译还是比较慢的。这一块会有什么问题,暂时未知。Node。jsNode。js的TypeScript世界开始ESM化,这个要看4。6 ConcernswithTypeScript4。5sNode12ESMSupport46452github。comESBuildesbuild慢慢生产可用。太快了,这一点对很多项目吸引太大了,下面的那个链接里介绍,一个30min的webpack用esbuild可以分钟级运行。而且figma的cto(也就是esbuild的作者,国内还有cto写代码么?)头脑非常清醒,esbuild整个做的技术选择,以及目前该项目的影响力,对于前端世界的影响有可能持续加大。 www。learnwithjason。devJavaScript装饰器JavaScript的装饰器可能快来了。可能是最特殊的一个JavaScript的语法特性。这个对一堆现有的TypeScript装饰器框架都是潜在利空。实际上,现有的TypeScript装饰器框架都和esbuild或多或少有冲突。而esbuild带来的诸多好处,对于新项目是否上TypeScript临时的装饰器,还是等JavaScript的装饰器,提出了一个至少是需要想一想的问题。这个对于TypeScript世界的一部分,有可能是核弹级的。有兴趣的同学可以去翻翻esbuild的issue,看看为啥evan不支持TypeScript的emitDecoratorMetadata。下面的链接是目前的进展。 Decoratorsupdate〔2021。7〕github。comJavaScript基建JS和TS的核心基建Rust化,相应的基建可以开始投入生产了。例如swc、rome、deno。等等。对这块感兴趣的同学可以去看看deno的build的issue。我只能说,swc还有很长的路要走。esbuild和swc的结果,会极大影响go和rust在JSTS世界的关系。 RUST是JavaScript基建的未来知乎 前端语言的集中化:RustGoTypeScriptJavaScript,这四门语言大概能组成整个JS和TS世界的99?JavaScript模块化ESMESM继续推进。这一点对于微前端解决方案是极大利好。会有新的微前端解决方案出现,会比Modern。js轻很多。会出现类似Modern。js的cli编译打包方案。其实建议Modern。js把这一块提出来单独弄一个项目,这一块在个人看来是Modern。js最Modern的地方。个人认为,这个最终方案大概率是对pnpm亲和对TypeScript的Type亲和只支持ESM基于esbuild(也就代表着,几乎不用TypeScript自带的语法特性)有类似fastify或者rollup的插件系统主框架可能是go编写的能提供处理依赖DAG方面的工具提供cliCSSTailwindCSS进一步得到应用和流行。年底发布3。0,TailwindCSS的作者很有想法。 TailwindCSSv3。0TailwindCSStailwindcss。comVueVue3进一步流行。期望TS官方能像对待React一样对待Vue3。Vuex5大家都在谈论,但是我没找见RepoViteVite有望成为最好和最快的前端开发环境。个人认为,Vite其实应该集成一些Deno的支持。Vite和Deno在一起能做点什么?目前没想到。 https:patak。devviteecosystem。htmlpatak。devNuxtNuxt3。0正式版发布。Nuxt3。0对于Vue的SSR世界,应该是质的改变的一个版本,这个版本对于Nuxt团队也是非常挑战的,他们用TS完全重写了Nuxt https:github。comnuxtframeworkgithub。comJSTS应用工具型APP工具创业进一步恶化,各种工具的开源版本雨后春笋般出现。本质是工具抽象的普遍普及化,也是前端世界上一阶段的积累开花结果的情况。有意思的是,据我从github的trending上来看,这些项目,大部分还都是国人所做,质量很高,但是同质化很严重。技术三大循环,首先做出来的闭源赚钱同质化严重开源赚钱在多就变成培训班的讲义了。这一速度的周期,目前看,一个阶段到另一个阶段大约是23年左右。好消息是,我们学最佳实践越来越快,坏消息是这一速度在进一步压缩。TypeScript函数式编程一些有关的项目 https:github。comgcantifptsgithub。com https:github。comremedaremedagithub。comORMprisma越来越流行typeorm趋于稳定(JS的装饰器成熟对于typeorm可能是利空)浏览器离线存储解决方案所有的前端离线状态存储,响应式是标配 https:github。comdexieDexie。jsreleasestagv3。2。0github。comJsonschema进一步应用typescript解决了编译前的问题。jsonshema解决运行时的问题。已经有很多成熟的项目帮助这件事更容易应用 https:github。comsinclairzx81typeboxgithub。comGithub前端项目现状没事就翻翻github的trending来看,主要是JavaScript和TypeScript的项目(没有数据支持,纯粹是Github推给我的项目和trending项目的感受)有以下特点:国内的github项目大部分属于整合型业务项目,业务框架以及学习资料的项目。国内流行的框架,如果issue提的很多,中文就特别多,这一点似乎对国外人使用就劝退很厉害。有很多项目能明显看到,只有国内人使用。截止2021年底,国内在github上的JavaScript和TypeScript的基建项目,数量相对比较少。题外话,pnpm的小哥是乌克兰人,貌似创业也发生在乌克兰(没确认创业地点。)截止到2021年底,我今年受惠最多的我国作者(除了尤大)是 GitHubegoistegoist:readmeforgithub。comegoistgithub。com 我使用了他开发的tsup和cac,其中tsup是一个基于esbuild的,针对TypeScript的打包器。cac是一个命令行工具,支持deno。还有 https:github。comxcatliugithub。com我使用了他开发的eslintconfigalloy还有 https:github。comantfugithub。com我使用了他开发的一些vite的组件,以及学习了一些他写的文档。Web3。0元年 其实这些变化,单看每个都不复杂,基本上:老的标准慢慢废弃,选择新的标准,例如ESM开始对快有一些追求,例如esbuild、vite更原子化的抽象,例如TailwindCSS更多的类型,更多的约束,例如TypeScript的持续流行潜在的,更多的函数式。实际上这里面很多项目,去看源代码基本都是函数式编程。这一点,其实变成了一种分工分界线,函数式编程,对于广大的应用的编程领域来说,还是太难了,但是对于基建和框架范畴,基本都是函数式编程。在TypeScript和JavaScript的世界,貌似没有第二种选择。当然这一点,本质是更抽象和模型与更原子的语义化。(函数式的一切都是为了compose,实际上这一点能涵盖上面那几点) 所有这些变化,都是为了迎接Web3。0,开发更复杂的应用。 你准备好了么?