Babel 7 强行转译 node_modules 内的文件

因为 @babel v7 会默认不对 node_modules 下的文件进行编译(或需要单独放入一个 .babelrc 之类的配置文件?),利用 includeignore 这些组合配置也不能让它无视掉这个设定。

最后只好对 package 本身进行修正了,diff 内容如下:

diff --git a/node_modules/@babel/core/lib/config/files/package.js b/node_modules/@babel/core/lib/config/files/package.js
index c0f8988..6dc1208 100644
--- a/node_modules/@babel/core/lib/config/files/package.js
+++ b/node_modules/@babel/core/lib/config/files/package.js
@@ -28,7 +28,7 @@ function findPackageData(filepath) {

   let dirname = _path().default.dirname(filepath);

-  while (!pkg && _path().default.basename(dirname) !== "node_modules") {
+  while (!pkg) {
     directories.push(dirname);
     pkg = readConfigPackage(_path().default.join(dirname, PACKAGE_FILENAME));

可能会有一些副作用:需要手动在 ignore 中自己排除不需要的包,比如:

diff --git a/test-package.js b/test-package.js
index 83ad330..0dd644c 100644
--- a/test-package.js
+++ b/test-package.js
@@ -1,6 +1,8 @@
 require('@babel/register')({
        include: [ () => true ],
-       ignore: [ () => false ],
+       ignore: [(name) => name.includes('node_modules') && !['jixun'].every(pkg => {
+               return name.includes(pkg);
+       })],
        cache: false,
 });

配置了一个基本的 POC 仓库,见 JixunMoe/babel-transpile-node_modules-example-1,不更新 @babel/core 版本的情况下能一直用。

另外这是一个不推荐的修改方法,包的发布者应实现提供转义好的版本,这样就不需要打补丁了。

Jixun

Jixun

学习与游戏的旅途,各类杂谈。