ОШИБКА JSC_REDECLARED_VARIABLE_ERROR при использовании плагина компилятора закрытия gulp

#javascript #typescript #gulp #google-closure-compiler

#javascript #typescript #gulp #google-closure-compiler

Вопрос:

Я уже две недели пытаюсь использовать компилятор закрытия для оптимизации и объединения проекта.
Проект изначально написан на TypeScript. Итак, я хотел использовать Tsickle для переноса в JS, который можно было бы легко передать в Java-приложение компилятора закрытия. Когда я, наконец, смог это сделать, я наткнулся на проблемы с модулями внешних узлов. Я перепробовал все решения, которые смог найти в группах Google, SO и в репозитории компилятора закрытия. Ничего не сработало.

Желая не допустить этого, я решил использовать gulp. Это мой gulpfile.js , Я старался сделать это как можно проще.

 const closureCompiler = require("google-closure-compiler").gulp();

gulp.task("js-compile", function () {
  return gulp
    .src("./src/**/*.js", { base: "./" })
    .pipe(
      closureCompiler(
        {
          compilation_level: "ADVANCED",
          warning_level: "VERBOSE",
          jscomp_off: "checkVars",
          js_output_file: "output.min.js"
        },
        {
          platform: ["native", "java", "javascript"]
        }
      )
    )
    .pipe(gulp.dest("./dist/js"));
});
  

Для меня слишком много входных файлов, чтобы я мог их поместить. На этот раз я использовал TSC вместо Tsickle для переноса.
Ошибка при запуске gulp, которую я получаю,

 [JSC_REDECLARED_VARIABLE_ERROR] Illegal redeclared variable: *nameofvariable*
  

У меня есть это почти для каждого файла в моем проекте, даже если имя не повторяется дважды в одном и том же файле.

Ответ №1:

Вы можете попробовать tscc. Он использует tsickle под капотом и предоставляет некоторые решения проблем с внешними node_modules.

Комментарии:

1. Я попытался использовать tscc как с накопительным, так и со спецификационным файлом, но тоже не очень повезло.

Ответ №2:

Попробуйте --env CUSTOM или --isolation_mode IIFE . Я столкнулся с этим при компиляции кода, который конфликтовал с интерфейсами браузера, такими как Node .