You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用@codemod/cli运行Babel插件时addComment方法失效问题求助

问题原因

你遇到的差异来自@codemod/cli的默认配置和astexplorer的默认Babel运行配置不一致:

  1. @codemod/cli默认开启retainLines参数,该参数的作用是尽量保留原代码的行号位置,副作用是会直接丢弃挂载在顶级Program节点上的前置注释。
  2. 你当前的实现是把注释绑定在Program节点本身,而非Program body内的语法节点上,@codemod/cli的输出逻辑不会处理Program节点的顶级leading注释。
解决方案

方案1(推荐):把注释绑定到插入的空语句节点上

修改插件代码,将注释直接挂载到你要插入的空语句节点,避免依赖Program节点的注释输出逻辑:

module.exports = function (babel) {
    const { types: t } = babel;
    return {
        name: 'addComment',
        visitor: {
            Program(path, state) {
                const emptyStmt = t.noop();
                // 第三个参数为true表示注释末尾自动添加换行
                emptyStmt.addComment('leading', '@@@ My precious @@@', true);
                path.unshiftContainer('body', emptyStmt);
            }
        }
    };
}

修改后直接用原来的命令运行即可生效。

方案2:禁用@codemod/cli的retainLines配置

不需要修改插件代码,运行命令时添加--no-retain-lines参数即可:

./node_modules/.bin/codemod --no-retain-lines --plugin ./babel-plugin.js ./transform-me.js

内容的提问来源于stack exchange,提问作者konclave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 08:06:10