2015-12-28 5 views
3

Мне очень сложно использовать локальные модули 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 не из коробки.

+0

Где это предположение делается в Аурелии? Как вы можете определить, что это не SystemJS или то, как Babel транксирует? – Andrew

+0

Мне тоже сложно с этим справиться. Я пытаюсь импортировать этот lib (http://savvior.org/), который должен быть модулем AMD, но я не могу заставить его работать. Я установил его через 'jspm install npm: savvior', но я могу, кажется, импортировать его правильно в моей модели представления. – emzero

+0

@Andrew. Предполагается, что в файлах конфигурации gulp приложения скелета Aurelia. Я не уверен, что все изменилось с той версии, которую я использовал, но в файле 'build/tasks/build.js' gulp преобразует все файлы в папку' src' в модули AMD через Babel. Я тестировал материал с помощью SystemJS, и он поддерживает загрузку разных типов модулей рядом. Проблема заключается в том, что вы пытаетесь перекрыть модуль, который уже находится в формате AMD. Вот почему решение было просто поместить модули AMD вне папки 'src', чтобы Gulp/Babel не пытались их перекрыть. – jbgarr

ответ

4

Просто поместите свои модули AMD из src, чтобы babel не смог его перенести. Здесь работает решение, я использую для импорта JQuery модулей:

Во-первых, у меня есть local_packages папку в корневом каталоге проекта, и у меня есть модуль Jquery local_packages/somelib/js/mymodule.js

Тогда в config.js

paths: { 
    ... 
    "local/*": "local_packages/*", 
} 

map: { 
    ... 
    "somelib": "local/somelib", 
    "somelib1": "/local_packages/somelib1", 
} 

И, наконец, мой импорт выглядит : import 'somelib/js/mymodule';

+0

Удивительный, спасибо за это! Я думал, что мне придется переконфигурировать задачу сборки gulp. Это намного проще. – jbgarr

 Смежные вопросы

  • Нет связанных вопросов^_^