如何作为ES6模块访问bower包?

时间:2014-01-29 18:52:07

标签: ember.js bower ecmascript-6 ember-app-kit

我正在尝试迁移一个ember应用程序以使用ember app-kit。该代码需要accounting.js库。在pre-app-kit版本中,文件是通过index.html

中的脚本标记加载的
<script src="http://cdnjs.cloudflare.com/ajax/libs/accounting.js/0.3.2/accounting.min.js"></script>

并通过全局命名空间在视图中访问

App.MoneyField= Em.TextField.extend({
  init: function() {
    this._super();
    var value = accounting.formatMoney(this.get("money") / 100, '');
    this.set('value', value);
  };
  // other functions omitted
});

在app-kit版本中,我将accounting.js作为bower依赖项包含在内。在bower.json

{
  "name": "ember-app-kit",
  "dependencies": {
    "handlebars": "~1.1.2",
    "jquery": "~1.9.1",
    "qunit": "~1.12.0",
    "ember": "~1.4.0-beta.2",
    "ember-data": "~1.0.0-beta.6",
    "ember-resolver": "git://github.com/stefanpenner/ember-jj-abrams-resolver.git#master",
    "ic-ajax": "~0.3.0",
    "ember-testing-httpRespond": "~0.1.1",
    "accounting":"~0.3.2"
  },
  "resolutions": {
    "ember": "~1.4.0-beta.2"
  }
 }

当我尝试构建应用时,它会给出错误

W117: 'accounting' is not defined.

我明白为什么会这样,并知道我需要某种import accounting from ...陈述。

如何将通过bower安装的软件包导入为ES6模块?

1 个答案:

答案 0 :(得分:1)

我知道这是几个月前提出来的,但从那时起,Ember App Kit已经由ember-cli继承,这提供了一种非常简单的方法来访问bower或npm依赖项。

关于作为ES6模块访问:

  • 非AMD资产无法作为ES6模块访问,您只需通过它们导出的全局变量访问它们。
    • e.g。 moment
  • 另一方面,AMD资产可以通过ES6 import语法访问
    • e.g。 import { raw as icAjaxRaw } from 'ic-ajax';

值得一提的是,ember-cli现在支持一个附加系统,可以将这些内容简单地导入到项目的package.json中。一些比较流行的图书馆已经有了ember-cli插件。 This post描述了如何自己编写。