在ember-cli中导入依赖项(例如,import math.js)

时间:2015-05-25 17:34:25

标签: javascript ember.js ember-cli amd mathjs

我对在ember-cli中导入依赖关系感到困惑,尤其是关于标准AMD案例,如official Ember Cli document中所述。该文档没有提供太多的例子,在我看来,它假设读者对AMD有很好的了解,但对我来说并非如此。我的直接用例是import math.js.不幸的是,official document of math.js没有提供有关使用Ember Cli导入的示例。然后,我发现this post有相对更清晰的例子,特别是下面的例子似乎非常相关。

app.import({
  development: 'vendor/lodash/dist/lodash.js',
  production:  'vendor/lodash/dist/lodash.min.js'
}, {
  'lodash': [
    'default'
  ]
}); 

然后,我用math.js做了类似的事情,如下所示:

app.import({
  development: 'bower_components/mathjs/dist/math.js',
  production:  'bower_components/mathjs/dist/math.min.js'
}, {
  'mathjs': [
    'default'
  ]
});

然而,它不起作用。当我尝试将其与

一起使用时
import mathjs from 'mathjs'

我收到了一个错误。最后,我使用了以下解决方案:

// Brocfile.js
app.import('bower_components/mathjs/dist/math.min.js');

// some controller.js
var math = window.math

虽然以上解决方案有效,但我不喜欢它,因为它可能会受到名称冲突的影响。此外,基于math.js的文档,在我看来它应该支持标准的AMD类型的导入。

所以,我的问题如下 1.在上面的lodash示例中,'default'是什么意思?这是对相应模块中导出的任何内容的一般参考吗?如何判断我是否可以使用它(例如,math.js)? 2.如果模块支持require.js,那么它是标准的AMD模块吗?如果是这样,给出如下代码:

require.config({
  paths: {
    mathjs: 'path/to/mathjs',
  }
});
require(['mathjs'], function (math) {
  // use math.js
  math.sqrt(-4); // 2i
});

如何将其映射到Ember Cli代码?

1 个答案:

答案 0 :(得分:13)

这有点痛苦但是由于mathjs没有公开/支持命名的AMD模块,所以你不能使用app.import中的额外语法。

您有两种选择:

  1. ember-browserify(如果图书馆支持CommonJS - mathjs会这样做)
  2. 自己“填补”依赖图书馆
  3. 1。烬-browserify

    1. 安装ember-browserify

      ember install ember-browserify

    2. 将CommonJS库安装为NPM包

      npm install --save-dev mathjs

    3. 使用带有常规import语法的NPM包

      import mathjs from 'npm:mathjs';

    4. 2。匀化

      您需要做的是“填充”库以使其通过import语句提供。我仍然不知道垫片的含义是什么<:

      如果您对创建凉亭套餐感兴趣,例如ember-cli-mathjs-shim然后您可以使用它并让其他人也可以使用它。一些例子是:

      ember-cli-shims

      ember-cli-moment-shim

      ember-cli-sockjs-shim

      但是,如果您不愿意这样做,我建议您将以下内容添加到您的项目中:

      vendor/shims/math.js - 在shims下创建一个vendor文件夹(供应商是您不依赖于NPM或Bower的依赖点 - 而且Brocfile似乎无法使用从这里以外的任何地方到app.import - 例如app/shims或根级别的简单shims不起作用)

      vendor/shims/math.js

      (function() {
        /* globals define, math */
      
        function mathJSModule() {
          'use strict';
      
          return { 'default': math };
        }
      
        define('mathjs', [], mathJSModule);
      
      })();
      

      Brocfile.js

      app.import('bower_components/mathjs/dist/math.js');
      app.import('vendor/shims/math.js', {
        exports: {
          'mathjs': [ 'default' ]
        }
      });
      

      此处的订单很重要。