一、直接引入 @babel/core 的 transform,ts 被转译的问题(TODO)
1、 @babel/core 与 @babel/parser 中的 parse 不同
import { parse } from "@babel/core"
不同于:
import { parse } from "@babel/parser"
二、preset 和 plugin 有什么区别?
preset 是 a set of plugins.
比如 babel-preset-typescript 就是用到了 @babel/plugin-transform-typescript。
另外 babel 7.8.0 + 需要 babel.config.json
(https://babeljs.io/docs/en/usage),但是对 @babel/parser 中的 parse 不生效,因为没从外部读取 https://babeljs.io/docs/en/babel-parser。
{
presets: [
[
"./preset",
{
framework: "react",
ts: true,
},
],
];
}
transform 会受到 babelrc 的影响:https://babeljs.io/docs/en/options#babelrc,因为会读取配置 https://sourcegraph.com/github.com/babel/babel@main/-/blob/packages/babel-core/src/config/files/configuration.ts#L30
三、空行丢失
转为 ast 就会丢失空行 https://astexplorer.net/ ,因为 ast 只记录结构,不记录空行 / 空格
https://www.coder.work/article/1321017
但是用 recast 就不会丢失。一大特色就是在 print 的时候会尽量的保持源代码的格式,输出时只会重新输出有修改的 ast,未更改过的 ast,会直接按原样输出。所以非常适合那些需要修改源码,并且要把修改后的结果覆写到源码的情况。详见 node_modules/recast/lib/printer.js 中的function genericPrint(path, config, options, printPath)
& case "JSXEmptyExpression":
、node_modules/recast/lib/lines.js。