May-26, 2024 · 10min
通常开源的项目里都有一个 CONTRIBUTING.md 文件,来让其他的开发者知道如何贡献这个项目,或者看这个项目的 .github/workflows 里的一些运行测试、发布的 action 都可以找到运行这个项目的有效信息
本地下载克隆的仓库
git clone git@github.com:Debbl/react.git
使用 VSCode 打开
code react
因为 react 是使用 flow 语言(类似 ts )写的所以需要在 VSCode 提供相关语言的支持在 VSCode 中下载 flow 语言的插件 flow-for-vscode
{
"recommendations": ["flowtype.flow-for-vscode"]
}
在本地的打开的仓库的根目录创建下面这个文件
{
"javascript.validate.enable": false,
"typescript.validate.enable": false,
"flow.enabled": true,
"flow.useNPMPackagedFlow": true
}
解释一下这里的配置,前两个是禁用默认的 js ts 检查,然后开启 flow 插件,并且使用 node_modules
下的 flow 运行,这两个其实是默认开启的,更多详细的配置 flow-for-vscode#configuration
这里可以直接参考 contribution-prerequisites 的官方文档,但是有几个需要注意的地方
.nvmrc
里对应的 node 版本,最好安装对应的版本package.json
的 packageManager
有对应的 yarn 版本java 17.0.11 2024-04-16 LTS
这里可以参考文档的这一部分 sending-a-pull-request
完全使用 yarn.lock
安装,这里推荐一个好用的工具 antfu-collective/ni 直接使用 nci
安装,我也参考别人的项目写了一个 rust 的版本 Debbl/nci
yarn install --frozen-lockfile
因为我使用的是 M1 芯片,在安装的过程中遇到了几个问题
/bin/sh: autoreconf: command not found
使用 brew 安装 brew install autoconf
brew install automake
optipng-bin
依赖报错,可以看这个 optipng-bin/issues/117yarn flow
这里直接运行这个命令会要求选择对应的环境
这里使用 dom-node
环境
yarn flow dom-node
执行完成之后会发现在根目录多了一个 .flowconfig
文件
完成之后 VSCode 就会有提示了
yarn test
可以参考文档的 development-workflow
cd build/oss-experimental/react
yarn link
cd build/oss-experimental/react-dom
yarn link
这里注意 node 环境的话需要 link 三个仓库 react
react-dom
scheduler
也可以直接使用 fixtures
目录的环境,这里我使用 fixtures/packaging/webpack/dev
cd fixtures/packaging/webpack/dev
yarn
yarn build
这里需要替换一下 input.js
文件,新版 ReactDom 里没有 render 函数了
var React = require('react')
var ReactDOM = require('react-dom')
ReactDOM.render(
React.createElement('h1', null, 'Hello World!'),
document.getElementById('container'),
)
var React = require('react')
var { createRoot } = require('react-dom/client')
console.log('react version:', React.version)
const root = createRoot(document.getElementById('container'))
root.render(React.createElement('h1', null, 'Hello World!'))
使用 LiveServer打开 fixtures/packaging/webpack/dev/index.html