-
-
Notifications
You must be signed in to change notification settings - Fork 8.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
refactor(v2): migrate to Typescript ❄️🌀🐋 #1490
Conversation
Deploy preview for docusaurus-2 ready! Built with commit 048ab16 |
Deploy preview for docusaurus-preview ready! Built with commit 048ab16 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks so much for adding types! ⌨️
@@ -2,3 +2,4 @@ dist | |||
node_modules | |||
build | |||
.docusaurus | |||
packages/docusaurus-utils/lib/ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why do we Prettier ignore this? Will all TS files be Prettier ignored? Are they meant to be?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lib is the compiled file
Motivation
Background
Docusaurus currently doesn't have any static typing and this has been a painful point for us the maintainers of this repo. In order to move faster and confidently in the future, we have decided to add static typing to our codebase, in particular for Docusaurus 2 codebase while it is still not mature yet.
We, the Docusaurus core team have privately discussed on whch static typing to choose initially and we came to decide between Flow, ReasonML and Typescript.
Initially we decided to go with Flow (because me and Yangshun is familiar with it) but after trying it, we decided to drop it. The library definition is much less than Typescript and the community is smaller too. It makes much more sense to use TS rather than Flow if what we want is just an addition to JavaScript.
We are also very influenced by other popular OSS project move to TS (Example: jestjs/jest#7554)
However, we also decided to try ReasonML because it has a rock solid type system and it looks very promising. At first, we are quite happy with it but we realize that the learning curve is too steep and the community is even smaller. It's a very risky move to use ReasonML and that will make our external contributors even less. Nobody is working on Docusaurus full-time, so to keep the project alive, we'll have to rely on contributors.
So, we decided to go with Typescript. We believe the complexity of adding static typing is worth it in the long-term. We can write codes more confidently (looking at you, JavaScript :)) and it will be easier for new contributors to understand the codebase.
Changes
So, this PR is the very beginning move of Docusaurus to Typescript. Starting with
@docusaurus/utils
I think this is a good start. Will be adding more in the future
Extra changes:
yarn start
andyarn build
command at root to make it easier to start website without having to go to website directory (cd website
)Have you read the Contributing Guidelines on pull requests?
Yes
Test Plan