在./vendor目录中具有命名导出的ES6 lib

时间:2015-09-15 14:40:06

标签: ember.js

Ember 2.0 / ember-cli 1.13.8

我无法找到一种方法从我的Ember 2.0项目中的./vendor目录中的ES6模块导入名称导出。

  • 简单 我的Controller中的import {Socket} from 'vendor/phoenix'不会将lib转换为ES5
    我的app.import('vendor/phoenix.js', {exports: {phoenix: ['Socket']}})中的
  • ember-cli-build.js也没有将lib转换为ES5。
  • 我也试过了 https://stackoverflow.com/a/29659509/255633 -
      由于命名导出,
    1. 无法使其正常工作。 (Error: Entry module can only have named exports in strict mode (pass ``strict: true``)
    2. 当我只修改库以使用default export时,错误消失了但是库无法导入。看起来Broccoli没有将lib合并到树中。

这是我的ember-cli-build.js

  var tree = './vendor';
  var amdFiles = new ES6Modules(tree, {
    format: 'amd',
    bundleOptions: {
      entry: 'phoenix.js',
      name: 'phoenix'
    }
  });

  return mergeTrees([app.toTree(), amdFiles]);

1 个答案:

答案 0 :(得分:2)

当您将ES6文件导入到ember应用程序时,您需要让ember通过转换程序运行该文件,因此您只需在控制器中执行导入即可。问题是,ember需要将文件放在app文件夹中才能导入它。

所以将JavaScript文件放在app文件夹下的say:

app/phoenixjs

然后在你的控制器中:

import phoenix from 'PROJECTNAME/phoenixjs/phoenix

然后您可以在该文件中的任何位置使用phoenix对象。

工作证明:

Chrome Debug Tools Proof

修改

能够通过

使用命名导入
import {Socket} from 'import-test-app/extends/phoenix';
import Ember from 'ember';

export default Ember.Controller.extend({
  test:Socket.name
});
模板测试中的

是“Socket”