Skip to content

mcbbs-wiki/Wiki-Common-JS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

使用 Typescript 重写 common.js

为什么这么做

  • MediaWiki 会自动压缩 common.js,但是压缩工具不兼容 EMCAScript2016(俗称 ES6)语法。
    • 因此任何使用 ES6 及之后的新特性编写的代码,最终都要改写成难看的 ES5 语法代码。
    • 同时 MediaWiki 不会在提交编辑的时候告诉你,哪里不符合,只能自己去看报错,一遍一遍改。
  • Typescript 可以将 TS 代码自动编译成 ES5 语法的 JS 代码,你可以放心大胆地使用新特性。
    • 比如使用.?可选链、??空值合并符,而不是写好几行自己都看不清的判断式。
    • 编译得到的代码可以通过 MediaWiki 压缩器的校验,不用担心这些问题。
  • Typescript 在 JavaScript 的基础上添加了类型校验,可以检查出很多隐藏问题。
    • 根据 MDN 的数据,现有网页上的大部分 JS 错误来源于类型错误。

这样做有什么缺点

  • 编译 TS 需要安装 NodeJS、Typescript。
  • TS 无法将Promisefunction*Intl等特性编译为 ES5 代码,因为 ES5 中没有实现这些功能的方法。
    • 大部分可以正常编译,比如代码里面的letconst都会编译成varfor(of)会编译成原始的for(;;)
  • TS 编译出来的文件会添加Polyfill(可以理解为代码特性补全),因此编译后的代码并不好看。
  • TS 无法校验所有的类型错误,只能发现绝大部分。
  • 不能像以往那样修改 JS,想到哪写到哪,需要打开集成开发环境修改仓库中的代码并同步。

有没有什么替代方案

  • 让 MediaWiki 加紧开发支持 ES6 语法的 JS 压缩器。
    • 或者让他们直接支持服务端 TS 编译。
  • 继续使用 ES5 规范的 JS 代码编写脚本。

我该如何添加内容到仓库

  1. 下载仓库的主支(git clone
  2. 打开 IDE,修改代码
  3. 提交到仓库(git addgit commitgit push)的新分支
  4. 提交 PR(git merge
  • 不推荐:如果改动很少而且你觉得不会导致合并问题,你可以直接提交到主支。

About

用TS重写Wiki的common.js及其连带的JS

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published