Мне очень сложно использовать локальные модули AMD в проекте Aurelia, который использует es6, JSPM и system.js. Я надеюсь, что кто-то может помочь мне настроить мой проект, чтобы позволить мне импортировать/загружать модули AMD и использовать их в моем проекте. Местные модули типа AMD в формате, аналогичном следующему:Как правильно загружать локальные модули AMD с помощью jspm/system.js
define
(['require',
'lib/alerts/STARTSTOP',
'lib/alerts/STOPPED',
...
],
function(require, STARTSTOP, STOPPED, ...) {
return {
alert: function(data) {
var type = data.type;
var ev = data.event;
var cls = require('lib/alerts/' + ev);
return new cls(data);
}
};
});
Когда я пытаюсь импортировать/загрузить этот модуль в модуль ES6 Я бегу в следующее сообщение об ошибке: Uncaught TypeError: Unexpected anonymous AMD define.
. Я получаю эту ошибку при попытке загрузить модуль в любом из следующих способов:
System.import('lib/alerts/AlertFactory').then((m) => {
console.log(m);
});
или
import AlertFactory from 'lib/alerts/AlertFactory.js';
Я также удостоверился, чтобы добавить следующий сценарий в мой index.html:
<script>
window.define = System.amdDefine;
window.require = window.requirejs = System.amdRequire;
</script>
В дополнение к вышесказанному, я также добавил свойство метаформата в файл config.js, но это тоже не помогло.
meta: {
...
"lib/alerts/*.js": {
"format": "amd"
}
}
У кого-нибудь есть идеи по поводу того, почему я столкнулся с ошибкой, которую я вижу, и как правильно загружать мои модули? Я ценю любую помощь/понимание, которую вы можете предложить.
UPDATE
я, наконец, понял, что главная проблема в том, что я пытаюсь использовать существующие модули AMD в и проект Аурелия, и по умолчанию Aurelia глоток Построй предполагает, что весь код написан в ES6 и не смешивается с AMD. Вот почему у меня проблемы. Vanilla jspm/system.js обрабатывает сочетание форматов модулей, но Aurelia не из коробки.
Где это предположение делается в Аурелии? Как вы можете определить, что это не SystemJS или то, как Babel транксирует? – Andrew
Мне тоже сложно с этим справиться. Я пытаюсь импортировать этот lib (http://savvior.org/), который должен быть модулем AMD, но я не могу заставить его работать. Я установил его через 'jspm install npm: savvior', но я могу, кажется, импортировать его правильно в моей модели представления. – emzero
@Andrew. Предполагается, что в файлах конфигурации gulp приложения скелета Aurelia. Я не уверен, что все изменилось с той версии, которую я использовал, но в файле 'build/tasks/build.js' gulp преобразует все файлы в папку' src' в модули AMD через Babel. Я тестировал материал с помощью SystemJS, и он поддерживает загрузку разных типов модулей рядом. Проблема заключается в том, что вы пытаетесь перекрыть модуль, который уже находится в формате AMD. Вот почему решение было просто поместить модули AMD вне папки 'src', чтобы Gulp/Babel не пытались их перекрыть. – jbgarr