如何设置ember引擎?

时间:2016-12-18 11:05:49

标签: javascript node.js ember.js ember-engines

我使用.gitignore ember-engines0.4.0 ember-cli创建了一个独立的可路由引擎。

如果我调用引擎索引路由(2.10.0),我会收到此错误:

/thingy/

使用应用Assertion Failed: Asset manifest does not list any available bundles.

router.js

引擎应用this.mount('thingy-frontend', { as: 'thingy', path: 'thingy' });

routes.js

安装了发动机'通过耗材this.route('index', { path: '/' }); 应用的node_modules/目录中的符号链接。 (See here why)。

为了好玩,我试图改变路线以测试它是否有效......

使用应用ember-cli

router.js

引擎应用this.mount('thingy-frontend', { as: 'thingy' });

routes.js

我已拨打this.route('index', { path: 'new' }); 并获得了/thingy/new。另外,如果我调用根路径,我会得到一个UnrecognizedURLError

此外,如果我在引擎Assertion Failed: Asset manifest does not list any available bundles.中放置console.log('...');,我也看不到任何输出。好像它根本没有加载。

该设置的灵感来自官方README和官方示例回购。

知道如何修复此Ember引擎设置吗?

你可以在GitHub上找到回购:

3 个答案:

答案 0 :(得分:6)

我们可以解决这个问题。有几个问题,我将与您分享我们所做的事情:

1。添加ember-engines作为依赖(不仅仅是dev-dependency)

您必须在ember-engines中为应用和引擎添加package.json作为依赖项。所以我们改变了 package.json到:

"dependencies": {
  "ember-cli-htmlbars": "^1.0.10",
  "ember-cli-babel": "^5.1.7",
  "ember-data": "^2.10.0",
  "ember-engines": "0.4.0"
}

不要忘记npm install

2。将实际引擎添加到package.json

即使它在node_modules中不是公共的和符号链接的,就像我们的情况一样,你必须将引擎添加到package.json

在我们的案例中,这是"thingy-frontend": "*"

不要忘记npm install

3。检查符号链接名称

在我们的例子中,符号链接具有引擎repo的名称而不是实际的引擎名称。那不行。我们换了 符号链接名称为thingy-frontend(这是引擎index.js的名称)。

4。使用右侧解析器

您必须确保addon/engine.jsapp/resolver.js都使用ember-resolver

5。无法加载资产清单。

这可能是ember-engines中的错误。有关详细信息,请参阅问题:https://github.com/ember-engines/ember-engines/issues/282#issuecomment-268834293

您可以通过手动向<meta />添加<head> - 标记来解决该问题(请参阅上面的GitHub问题链接)

非常感谢Michael Donaldson

答案 1 :(得分:4)

我无法从Consuming app package.json中找到对您的引擎应用的引用。我认为你应该添加到Consuming package.json Engine应用程序。对于in-repo-addons - 我可以在ember-engines-demo中找到它们在package.json中的引擎:

"ember-addon": {
    "paths": [
      "lib/ember-chat-engine"
    ]
 }

对于非in-repo-addon,但对于普通模块,他们有:

"dependencies": {
    "ember-data": "^2.6.0",
    "ember-engines": "dgeb/ember-engines#v0.2",
    "ember-blog-engine": "dgeb/ember-blog-engine"
  },

注意ember-blog-engine。这里完全引用了他们的package.json

然而,在您的消费中,ember-engines-app应用package.json未列出 ember-engines-engine名称。

Ember处理来自package.json列表的插件,因此您必须在那里引用您的引擎插件。否则,您将永远不会从Ember CLI环境中执行此类包中获得任何代码行。

请将您的ember-engines-engine添加到使用app package.json。

答案 2 :(得分:0)

我补充说不兼容也可能是一个问题......

由于Ember Engines是实验性的,并且是针对Ember和Ember-CLI的主要分支进行开发的,因此请确保使用 compatible versions