如何在ember-cli中导入amd模块?

时间:2014-07-13 01:33:15

标签: ember-cli

我正在ember-cli的帮助下构建一个EmberJS应用程序,这很棒,但我有一个错误,我找不到我做错了什么。

以下是我在西兰花文件中所做的事情:

app.import('vendor/underscore/underscore.js', {
    exports: {
        "underscore": [
            "underscore"
        ]
    }
});

然后在我的一个控制器中:

import _ from "underscore";

ember-cli构建我的应用程序。

但是当我使用下划线进入控制器时,我收到错误:

  

错误:找不到模块下划线。

我做错了什么?

3 个答案:

答案 0 :(得分:5)

尝试:

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

这至少会给“import _ from'下划线';”有机会工作。如果您选择AMD或ES6版本的下划线/ lodash,请列出您要导入的模块为“default”。

编辑:

使用下划线是否至关重要?为什么我问,我正在使用lodash和一个Ember-cli项目,它运行正常。

Console> bower install lodash --save

然后在Brocfile中:

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


//or:
app.import('vendor/lodash/dist/lodash.min.js');

至于下划线 - 有an issue没有捆绑devDependencies,其中下划线是一个。

答案 1 :(得分:3)

我从#emberjs IRC的锁上得到了这个。

https://github.com/ef4/ember-browserify

在您的项目中:

npm install --save-dev ember-browserify
npm install --save-dev underscore

在您的控制器中:

import _ from "npm:underscore";

然后你可以使用_。例如:_.each([1,2,3], alert);。我把手动添加到brocfile和package.json中的所有内容都拿走了。显然这会为你做。疯狂!

答案 2 :(得分:2)

在最新版本的ember中(我使用的是2.11)可以使用

在UMD包装器中加载AMD
app.import('bower_components/js-md5/js/md5.js', {using: [{ 
   transformation: 'amd', as: 'js-md5' 
}]});

并在您的代码中

import md5 from 'js-md5';

在您使用下划线的情况下,它应该如下所示:

app.import('vendor/underscore/underscore.js', {using: [{ 
   transformation: 'amd', as: 'underscore' 
}]});