【从0实现最接近官方版本的React】课程学习记录2
React项目结构:
react(宿主环境无关的公用方法)react-reconciler(协调器的实现,宿主环境无关)- 各种宿主环境的包
shared(公用辅助方法,宿主环境无关)
JSX的转换属于react包,首先需要创建react,然后进行pnpm init
随后可以看到如下自动生成的package.json
{
"name": "react",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
因为本次使用的是rollup打包工具,而使用pnpm init自动生成的入口文件: "main": "index.js",这是 Common JS 规范,rollup使用的规范是ESModule ,而这个规范对应的入口字段是 module,所以需要改成module,如下:
{
"name": "react",
"version": "1.0.0",
"description": "react公用方法",
"module": "index.ts",
"keywords": [],
"author": "",
"license": "ISC"
}
Symbol.for(key) 方法会根据给定的键 key,来从运行时的 symbol 注册表中找到对应的 symbol,如果找到了,则返回它,否则,新建一个与该键关联的 symbol,并放入全局 symbol 注册表中。
developer.mozilla.org/zh-CN/docs/…
本节遇到的一个坑
验证jsx的时候,链接了本地的react,打印jsx和react的时候,报了这个错,没链接之前,原生react是可以成功console.log的
最终找到原因是我把jsxDEV写成jsxDev了,怪不得一直出不来
TODO
- package.json里的monorepo的dependence的写法需要了解一下,如何把workspace下的a项目当做依赖写到b项目的packages.json里
- 需要确认一个问题
- 实现jsx里,babel里的编译显示children不是放在config里面的吗,maybeChildren如果传了1个children,会把config里的children覆盖吧(好像是因为jsx和jsxDev不同)