2015-12-28 57 views
3

我在使用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并不是开箱即用的。

+0

Aurelia的这个假设在哪里?你怎么能确定它不是SystemJS或巴贝尔如何运输? – Andrew

+0

我也很难过。我试图导入这个库(http://savvior.org/),它应该是一个AMD模块,但我无法得到它的工作。我通过'jspm install npm:savvior'安装了它,但我似乎可以在我的视图模型中正确导入它。 – emzero

+0

@Andrew Aurelia框架应用程序的配置文件正在做这个假设。我不知道自从我使用的版本以来事情已经发生了变化,但是在'build/tasks/build.js'文件中,gulp正在通过Babel将'src'文件夹中的所有文件转换为AMD模块。我用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