我在使用es6,JSPM和system.js的Aurelia项目中使用本地AMD模块非常困难。我希望有人能帮助我配置我的项目,使我能够导入/加载我的AMD模块并将其用于我的项目。当地的AMD的风格模块是类似于以下格式:如何使用jspm/system.js正确加载本地AMD模块
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模块,默认奥里利亚一饮而尽构建假设所有的代码写在ES6,而不是混合与AMD。这就是我遇到问题的原因。 Vanilla jspm/system.js可处理模块格式的混合,但Aurelia并不是开箱即用的。
Aurelia的这个假设在哪里?你怎么能确定它不是SystemJS或巴贝尔如何运输? – Andrew
我也很难过。我试图导入这个库(http://savvior.org/),它应该是一个AMD模块,但我无法得到它的工作。我通过'jspm install npm:savvior'安装了它,但我似乎可以在我的视图模型中正确导入它。 – emzero
@Andrew Aurelia框架应用程序的配置文件正在做这个假设。我不知道自从我使用的版本以来事情已经发生了变化,但是在'build/tasks/build.js'文件中,gulp正在通过Babel将'src'文件夹中的所有文件转换为AMD模块。我用SystemJS测试了一些东西,它支持并排加载不同类型的模块。问题在于,当您尝试传输已经采用AMD格式的模块时。这就是为什么解决方案是简单地将AMD模块放在'src'文件夹之外,所以Gulp/Babel不会尝试传输它们。 – jbgarr