更改Babel插件解析的目录?

8
我遇到了以下错误:
未知插件“transform-class-properties”在“base”的0处被指定,试图相对于“/home/me/Projects/myproj/src”解析。
消息已经很明确了,所以我知道为什么会出现这种情况,但我想更改Babel查找插件/预设/软件包的位置。
我正在使用Babelrollup通过rollup-plugin-babel
我给它的选项是:
{ plugins: [ 'transform-class-properties', 'transform-object-rest-spread' ],
  babelrc: false }

然而,我找不到更改Babel查找插件的选项的方式。难道没有办法在不重写我的插件列表以使用绝对路径的情况下完成这个操作吗?
我也找不到一个从 .babelrc 中提取依赖的公共 API 方法,因此手动重写文件以使用完整路径非常困难。注意,Babel 配置也可能存储在 package.json 中,并且已经有一些关于添加对 .babelrc.js 的支持的讨论——我真的不想维护自己的项目,搜索所有可能隐藏 Babel 配置的不同位置,解析文件并扫描其中所有带或不带任意 babel-plugin- 前缀的插件。

@bhantol,我不明白你的意思。如果我运行那个命令,它肯定会在node_modules下创建一个目录。我的问题是因为我正在尝试将babel配置(一个项目)与应用程序代码(另一个项目)分开。 - mpen
顺便提一下,我提供的链接也允许路径。 - bhantol
1
我必须像你一样做,但在我的情况下,“config”项目(我称之为“commons-rollup-builder”)是一个外部依赖项,但我让各个项目保留其.babelrc文件,但我可以轻松地将babel配置内联到我的rollup.config中,并将babelrc设置为false,而不会出现任何插件问题。如果这听起来像解决您的问题,我可以发布解决方案,粘贴我的项目片段。但该解决方案将涉及不自定义插件路径。 - bhantol
@bhantol 等等..你是怎么做到的?现在我想起来了,问题可能只是当前工作目录。脚本在应用程序上下文中运行,因此如果 Babel 插件针对 CWD 解析,则找不到它们...但是如果我只是将 CWD 更改为配置项目目录...会起作用吗?还是你做了一些不同的事情? - mpen
要点:默认的插件目录是 node_modules,Babel 将在其中搜索插件。因此,如果你的 commons-rollup-builder 是每个项目的 devDependency,并且 commons-rollup-builder 对所有常见的 babel-plugin-xxxxxx 都有依赖关系,那么当构建这些项目时,它们将基本上拥有所有所需的插件。现在,你可以将 Babel 配置放在 commons-rollup-builder 项目内的 rollup.config.js 中。所有 800 个项目只需引用 node_modules/commons-rollup-builder/rollup.config.js 即可进行构建。 - bhantol
显示剩余4条评论
1个回答

2
您可以使用NODE_PATH来实现相同的功能。
$ npx babel test.js
Unknown plugin "external-helpers" specified in "/Users/tarun.lalwani/Desktop/babeltest/.babelrc" at 0, attempted to resolve relative to "/Users/tarun.lalwani/Desktop/babeltest"

在指定模块路径位于不同位置后,您需要进行以下操作:
$ NODE_PATH=/Users/tarun.lalwani/Desktop/babeltest2/node_modules npx babel test.js
function test() {
   this.abc = function (url) {
      return console.log(url);
   };
}

NODE_PATH 环境变量允许您指定其他位置,以便搜索模块。


你是如何运行这个脚本的? - Tarun Lalwani
这里是gist。正如您所看到的,我正在尝试解析.babelrc,通过递归循环查找任何包含“plugins”的内容,然后针对我的配置项目而不是应用程序项目解析包并重写选项。这显然非常脆弱,因为如果Babel更改配置或添加对.babelrc.js的支持等,则我的工具将无法使用。我宁愿调用一些Babel API来提取插件列表,或者至少只设置dir。 - mpen
有两种方法可以实现,一种是在脚本中使用 process.env.NODE_PATH = "xyz" 设置 NODE_PATH,另一种是在您的情况下设置路径,要求插件中列出的模块,获取加载的模块的绝对路径,并将插件路径更改为实际完整路径。 - Tarun Lalwani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接