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

Posted

技术标签:

【中文标题】如何在 ember-cli 中导入 amd 模块?【英文标题】:How to import an amd module in ember-cli? 【发布时间】:2014-09-03 07:45:29 【问题描述】:

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

这是我在花椰菜文件中所做的:

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

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

import _ from "underscore";

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

但是当我使用下划线转到控制器时,我得到了错误:

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

我做错了什么?

【问题讨论】:

【参考方案1】:

在最近的 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' 
]);

【讨论】:

【参考方案2】:

我从 #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 的所有内容。显然这会为你做。疯了!

【讨论】:

这里的问题是 ember cli 推荐使用 bower 作为你的依赖管理器。我认为这是一个很好的方法,但它会分散您的依赖关系并使它们更难以遵循。目前,我已经接受使用 lodash/underscore 等库作为全局变量,方法是将它们导入 Brocfile 并使用 /* global _ */ 声明它们以安抚 jshint。【参考方案3】:

试试:

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

这至少会给出“import _ from 'underscore';”一个工作的机会。如果您选择 AMD 或 ES6 版本的下划线/lodash,请使用“默认”列出您希望导入的模块。

编辑:

使用下划线很重要吗?为什么我要问,我在一个 Ember-cli 项目中使用 lodash,它运行良好。

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,其中下划线是其中之一。

【讨论】:

以上是关于如何在 ember-cli 中导入 amd 模块?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 vanilla Javascript 文件中导入 nodejs 模块

如何在动态 Nestjs 模块中导入 registerAsync?

如何在 lambda 中导入 python 模块?

如何在 Swift 的 JavaScriptCore 中导入模块?

如何在 Node 中导入全局模块?我得到“错误:找不到模块 <module>”?

如何在 ember-cli 插件组件中找到 npm 模块