Skip to content

Latest commit

 

History

History
53 lines (40 loc) · 2.49 KB

Learn.md

File metadata and controls

53 lines (40 loc) · 2.49 KB

收获

一、直接引入 @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.jsonhttps://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。

相关资源推荐