2

我用ember-engines 0.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/引擎通过消费应用程序目录中的符号链接“安装” 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.

此外,如果我将 aconsole.log('...');放在引擎index.js中,我看不到任何输出。好像根本没有加载。

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

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

你可以在 GitHub 上找到 repos:

4

3 回答 3

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 />-Tag 来解决该问题<head>(请参阅上面的 GitHub 问题链接)

非常感谢迈克尔·唐纳森

于 2016-12-23T09:57:00.820 回答
4

我无法从 Consuming app package.json 中找到对您的 Engine 应用程序的引用。我认为您应该添加到 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 添加到使用应用程序 package.json。

于 2016-12-22T10:06:04.127 回答
0

我要补充一点,不兼容也可能是一个问题......

由于 Ember 引擎是实验性的,并且是针对 Ember 和 Ember-CLI 的主分支开发的,因此请确保您使用的是兼容版本

于 2017-07-07T22:51:21.103 回答