Babel 7 强行转译 node_modules 内的文件
- 中
- en
因为 @babel
v7 会默认不对 node_modules
下的文件进行编译(或需要单独放入一个 .babelrc
之类的配置文件?),利用 include
和 ignore
这些组合配置也不能让它无视掉这个设定。
最后只好对 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
版本的情况下能一直用。
另外这是一个不推荐的修改方法,包的发布者应实现提供转义好的版本,这样就不需要打补丁了。