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

标签 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 不是开箱即用的。

最佳答案

只需将您的 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';

关于javascript - 如何使用 jspm/system.js 正确加载本地 AMD 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34502010/

相关文章:

javascript - Angular2 加载文件请求过多

reactjs - 使用 System.js 加载 React 15.4 失败并出现 "require is not defined"错误

c# - 助手与 C# 类?什么时候用什么

javascript - 切换测试是否为 Nan

aurelia - 带有交换顺序的错误 aurelia-templating-router 1.0.1

typescript - 我如何实际部署 Angular 2 + Typescript + systemjs 应用程序?

javascript - 将插入符号移动到焦点文本区域的末尾

javascript - canvas.style.display = "block"不工作

Aurelia 无需 compose 即可动态创建自定义元素

aurelia - Aurelia 是否提供基于属性(property)原始值(value)的任何类型的 Dirty 指标