gpt4 book ai didi

ember.js - 为什么使用 bower 依赖项的 ember 插件需要覆盖 normalizeEntityName?

转载 作者:行者123 更新时间:2023-12-02 06:06:51 25 4
gpt4 key购买 nike

您正在开发一个内部需要 bower 包的 ember 插件。当您在 ember 项目中安装此插件时,您需要将 bower 包添加到项目的 bower 依赖项中,以便您的插件可以运行。

好的 - 很简单,we just need a default blueprint and a call to afterInstall

module.exports = {
normalizeEntityName: function() {}, // no-op since we're just adding dependencies

afterInstall: function() {
return this.addBowerPackageToProject('a-bower-package');
}
};

为什么需要覆盖 normalizeEntityName?
起初我错过了将它添加到我的蓝图,并且花费了大量的时间试图查明为什么它没有像我期望的那样安装 bower 依赖项。

我在任何地方都没有看到满意的答案, ember-cli guide explanation没有解决这个问题,我找到的最接近的资源是 this article ,关于这个主题的所有内容都是这样的:

The hero we all need, even if the reason we deserve it can be a bit opaque, normalizeEntityName needs to be overridden as a noop inside of the default blueprint in order for ember g your-addon-name to even work. Just set this as the first property of your exported object, and forget all about it (but never forget it in the future 😀):



那么......为什么我们需要它?

最佳答案

我会尽力解释 :) 请对不清楚的部分发表评论。

ember-cli 有 some commands如:构建、服务、生成、安装……

为了从蓝图生成一些代码,我们使用 generate命令。 generate 命令通常用于从蓝图生成一些东西。如ember g component my-componentember g route my-route ETC...

在此约定中,生成命令需要第二个参数 name .蓝图可以在其code templates 中使用此参数。 . ( code templates 并不表示 hbs 文件,而是表示将在目标应用程序中复制的各种源。如 in here 所述)

因此,蓝图类检查它是否在命令行中提供了名称。如果您不在命令行中提供实体名称,它将引发异常。

要通过此检查,您的插件的用户需要将一个虚拟参数传递给您的插件,例如:

ember g my-addon dummy-name

为了防止这种无意义的虚拟参数,您需要覆盖默认行为。这是通过添加 normalizeEntityName 来完成的。钩。

当然,你可以跳转到 ember-cli 的代码,通过 no code templates 时不抛出错误来改变蓝图的行为。由蓝图提供。但这会带来很多复杂性。

最后,这里是 ember-cli 的一些代码片段:
  • generate command使用 generateFromBlueprint生成代码的任务。
  • blueprint类(class)。
  • entityname 的检查是否未定义:ember-cli-normalize-entity-name
  • 关于ember.js - 为什么使用 bower 依赖项的 ember 插件需要覆盖 normalizeEntityName?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44204540/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com