Запустить функцию, загруженную из модуля ecmascript 6
Я впервые пытаюсь использовать систему модулей ecmascript 6. Я использую компилятор traceur. Даны два файла es6:
// app.js
export function row() {
alert('row');
}
// init.js
import { row } from 'public_js/app';
row();
Traceur (я использую задачу grunt-traceur) компилирует их в:
// app.js
System.register("public_js/app", [], function() {
"use strict";
var __moduleName = "public_js/app";
function row() {
alert('row');
}
return {get row() {
return row;
}};
});
// init.js
System.register("public_js/init", [], function() {
"use strict";
var __moduleName = "public_js/init";
var row = System.get("public_js/app").row;
row();
return {};
});
Я включаю скомпилированную версию init.js
в мой HTML с помощью простого тега скрипта:
<script src="/path/to/compiled/init.js" type="module"></script>
И ничего не происходит. Я не вижу своего предупреждения. Что я делаю неправильно?
1 ответ
Предварительно скомпилировав свой код как модули в ES5, вы теперь выводите его из мира автоматической системы импорта / загрузки модулей в ES6, и вам необходимо использовать механизмы ES5 для его загрузки. Итак, вам нужно включить скомпилированный код без type=module
атрибут, а затемget()
модуль, который пинает остальной мир.
Итак, у меня работает следующее:
<script src="/path/to/compiled/app.js"></script>
<script src="/path/to/compiled/init.js"></script>
<script>
System.get('public_js/init');
</script>
Поскольку вы предварительно компилируете код, я рекомендую объединить весь скомпилированный код в один файл JS, чтобы не включать их все.
Если вы используете Traceur без предварительной компиляции кода, вы можете жить в рамках конструкций ES6. Это включаетtype="module"
и / илиimport 'module-name'
,
Думая об этом дальше, app.js
правильно скомпилирован как модуль. init.js
Однако не нужно компилировать как модуль. Вы компилируете код с --module
флаг. Если вместо этого вы компилируете init.js
с --script
флаг, он не будет инкапсулировать init
код как модуль, и вам не нужно звонить System.get
рукой. Просто кое что для раздумий.