#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
.