Babel transpile systemjs模块跳过特定模块?

时间:2018-03-29 04:26:32

标签: javascript ecmascript-6 babeljs

我有一个香草Cordova应用程序。但它是一个Cordova应用程序的事实应该无关紧要,只需将其视为一个香草网站。现在大多数脚本都是通过<script>标签加载的。最近添加了env预设的gulp和Babel转换。我想开始迁移到Systemjs支持的ES2015模块。但是,因为有很多遗留代码(有些部分我不知道它在做什么,很多全局变量等),我想逐个文件地迁移到ES2015模块。有没有办法要求Babel不要为某些文件进行模块转换(但最好是为其他ES2015功能进行转换)?如果它不会混淆没有任何export语句的文件,那将会非常有用。

2 个答案:

答案 0 :(得分:0)

查看此处的ignoreonly babel.rc选项:https://babeljs.io/docs/usage/api/#options

答案 1 :(得分:0)

您可以将babel构建任务分为两部分。第一遍编译所有文件而不转换模块,第二遍仅将模块转换应用于您手动更新的文件列表。

以下是gulp和gulp-filter的看法:

const gulp = require("gulp");
const babel = require("gulp-babel");
const filter = require("gulp-filter");

const esmReady = ["src/somefile.js"];

gulp.task("default", () => {
  const f = filter(esmReady, { restore: true });
  gulp
    .src("src/*.js")
    .pipe(
      babel({
        presets: [["env", { modules: false }]]
      })
    )
    .pipe(f)
    .pipe(
      babel({
        plugins: ["transform-es2015-modules-systemjs"]
      })
    )
    .pipe(f.restore)
    .pipe(gulp.dest("dist"));
});