无法使用带有配置文件的 babel 转换来转换代码

Can not transform code with babel transform with config file

这是配置文件:

{
    "presets": [
        "@babel/preset-env"
    ],
    "plugins": [
        "@babel/plugin-transform-modules-commonjs"
    ]
}

这是命令:

npx babel src/* --out-dir build

CLI 输出是

src/script.js -> build\src\script.js

输出脚本文件与输入脚本文件相同。


这是 node.js 文件:

const babel = require('@babel/core');
const fs = require('fs');

fs.writeFileSync(
    'build/index.js',
    babel.transformFileSync(
        'src/index.js',
        {
            plugins: ["@babel/plugin-transform-modules-commonjs"]
        }
    ).code
);

输出脚本文件的内容符合预期。


我用这个作为输入:

const test = 0;
export default { test };

这是上面显示的 CLI 命令的输出。

const test = 0;
export default { test };

这是上面显示的 NodeJS 文件的输出(这是我预期的 CLI 输出)。

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports["default"] = void 0;
var test = 0;
var _default = {
  test: test
};
exports["default"] = _default;

问:你能用babel CLI转换代码吗?

不知道为什么 transform, which is an async function, is being used inside a synchroous, blocking execution. Instead use transformSync and .code

fs.writeFileSync(
    'build/script.js',
    babel.transformSync(
        fs.readFileSync('src/script.js').toString('utf8'),
        {
            plugins: ["@babel/plugin-transform-modules-commonjs"]
        }
    ).code
);

甚至更多,您可以使用 transformFileSync:

fs.writeFileSync(
    'build/script.js',
    babel.transformFileSync(
        'src/script.js',
        {
            plugins: ["@babel/plugin-transform-modules-commonjs"]
        }
    ).code
);

我们在需要转译的场景中使用了babel-node。 https://babeljs.io/docs/en/next/babel-node.html

npx babel-node src/* --out-dir build