Ember.js 插件不工作

Ember.js 插件不工作,ember.js,Ember.js,我在Github上安装了一个Ember插件: 它通过了所有的单元测试,并且以非插件的形式在我的一个项目中运行良好,但是我想把它从项目中提出来,并能够将它用作插件。不过,在如何公开这两个Ember类方面,我显然遗漏了一步。这可以在dummy应用程序中看到,该应用程序试图创建一个非常简单的模型,如下所示: import DS from 'ember-data'; import DictionaryModel from 'ember-dictionary'; export default Dict

我在Github上安装了一个Ember插件:

它通过了所有的单元测试,并且以非插件的形式在我的一个项目中运行良好,但是我想把它从项目中提出来,并能够将它用作插件。不过,在如何公开这两个Ember类方面,我显然遗漏了一步。这可以在dummy应用程序中看到,该应用程序试图创建一个非常简单的模型,如下所示:

import DS from 'ember-data';
import DictionaryModel from 'ember-dictionary';

export default DictionaryModel.extend({
  foo: DS.attr('string')
});
然后,当route()尝试使用该模型时,我得到以下错误:

处理路由时出错:索引无法读取未定义类型的属性“extend”错误:无法读取未定义类型的属性“extend”

对我来说,这感觉像是ES6/名称空间问题,但我不确定如何克服它。我确实尝试了以下更明确的导入语句:

import DictionaryModel from 'ember-dictionary/models/dictionary-model';

但同样的错误也发生了。任何帮助都将不胜感激。

我遇到了足够多的障碍,我认为我至少可以部分回答我的问题,但有些问题仍然存在,因此我不会将此答案标记为正确答案,希望其他人能给出更完整的答案


我意识到的第一个区别是我自己还没有弄清楚是针对Ember应用程序的名称空间还是针对插件的独立名称空间。在插件的
app
目录中定义的类将可用于在自己的命名空间中使用插件的任何应用程序。相反,
addon
目录中的类将被命名为addon的名称空间

我见过很多人在插件的
应用程序
目录中定义类,然后通过代理将其发送到
插件
目录,如下所示:

// addon/mixins/dictionary.js
import DictionaryMixin from 'ember-dictionary/mixins/dictionary';
export default DictionaryMixin;
尽管我已经看到了这一点,但在让这些外部名称空间类正常工作方面仍然存在问题。我认为可能还需要另外一个步骤来为插件添加
index.js
入口点,然后将这些类导出到那里。在任何情况下,当我决定首先使用内部名称空间解决方案时,我将不涉及此区域

我在内部名称空间解决方案中的下一个问题是围绕作为插件创建过程的一部分构建的虚拟应用程序。我希望这个虚拟应用程序有一个使用我在插件中创建的Mixin的模型,我想我可以将它称为:

import DictionaryMixin from 'ember-dictionary/mixins/dictionary';
但虚拟测试应用程序无法解决这一问题,因此我不得不求助于:

import DictionaryMixin from '../mixins/dictionary';

考虑到我的“外部名称空间解决方案”还不起作用,我认为这是合适的。。。需要返回到内部名称空间的解决方案。

我已经更新了repo,以使用Mixin策略,而不是重载模型。我已经更新了到回购协议的链接,以指向这个问题所基于的正确提交。我已经解决了这个名称空间问题的一些方面,但不是全部。我会把我的部分答案贴在下面。