Закрывающий компилятор не компилирует библиотеку ES6 - PullRequest
0 голосов
/ 31 марта 2019

Я нахожусь в процессе написания довольно большой библиотеки JavaScript с использованием Closure Compiler, но я создал меньший макет для использования в качестве примера этой проблемы:

src / main.js:

export function main(str) {
    console.log("From main: " + str);
}

Команда:

google-closure-compiler --compilation_level ADVANCED_OPTIMIZATIONS --language_in ECMASCRIPT6 --language_out ECMASCRIPT6 --js_module_root src/ --module_resolution node --js src/main.js --js_output_file build/main.min.js

Ожидаемый результат (приблизительно):

export function main(str){console.log("From main: "+str)}

Фактический результат:

'use strict';
* 1016Короче говоря, я боролся часами, и я не могу понять, как заставить Closure Compiler соблюдать «экспортные» выражения ES6.Я пробовал гуглить много раз, но я могу получить результаты только для "goog.modules" , чего я не хочу.Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 01 апреля 2019

Закрывающий компилятор в настоящее время не поддерживает модули в качестве вывода (в любом формате).

0 голосов
/ 31 марта 2019

Если вы компилируете только приведенную ниже функцию с помощью ADVANCED_OPTIMIZATIONS, компилятор Closure создает пустой вывод:

function displayNoteTitle (note) {alert (note ['myTitle']));}

Поскольку функция никогда не вызывается в JavaScript, который вы передаете компилятору, Closure Compiler предполагает, что этот код не нужен!

Ref

Вы должны добавить деталь, которая вызывает вашу функцию

function displayNoteTitle(note) {
  alert(note['myTitle']);
}
displayNoteTitle({'myTitle': 'Flowers'});

Или вы можете добавить ее к объекту окна

function displayNoteTitle(note) {
  alert(note['myTitle']);
}
// Store the function in a global property referenced by a string:
window['displayNoteTitle'] = displayNoteTitle;

Liveпример

...