如何使用jspm / system.js正确加载本地AMD模块

时间:2015-12-28 22:57:58

标签: javascript aurelia systemjs jspm

我很难在使用es6,JSPM和system.js的Aurelia项目中使用本地AMD模块。我希望有人可以帮助我配置我的项目,使我能够导入/加载我的AMD模块并在我的项目中使用它们。本地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"
    }
}

有没有人对我遇到的错误以及如何正确加载我的模块有什么想法?我感谢您提供的任何帮助/见解。

更新

我终于意识到这里的主要问题是我尝试在Aurelia项目中使用现有的AMD模块,默认的Aurelia gulp构建假设所有代码都是用ES6编写的,而不是与AMD混合。这就是我遇到问题的原因。 Vanilla jspm / system.js处理各种模块格式,但Aurelia没有开箱即用。

1 个答案:

答案 0 :(得分: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';