Ember 2.13:查找非app/helpers下Handlebars助手的定义插件
嘿,我在Ember 2.x时代也碰到过这种头疼的情况!针对你说的这种通用命名的Handlebars助手(比如你提到的contains,也就是示例里的totally-generic-name),我有几个实用的方法帮你快速定位,不用瞎谷歌碰运气:
这是最省心的办法!打开浏览器开发者工具里的Ember Inspector(确保版本和Ember 2.13匹配),切换到Helpers面板——这里会列出所有全局注册的Handlebars助手,包括第三方插件的。找到你要的totally-generic-name,点击它就能看到它的注册来源,通常会直接显示对应的npm包名,甚至能跳转到它的源码定义文件(如果能访问到的话)。
Ember的容器管理着所有注册的对象,包括助手。在控制台里输入下面的代码,就能直接拿到助手的信息:
// 获取已实例化的助手 Ember.__container__.lookup('helper:totally-generic-name') // 或者查看助手的工厂定义 Ember.__container__.factoryFor('helper:totally-generic-name')
执行后,打印出来的对象里,你可以看函数的toString()输出,里面会包含助手所在的文件路径(比如ember-composable-helpers/addon/helpers/contains.js),瞬间就能定位到对应的npm包。
如果上面的方法都没搞定,直接在node_modules里搜助手的注册逻辑。Ember助手注册一般会用到Ember.Helper.helper()或者export function,用终端命令搜:
# 递归搜索所有js文件中包含助手名称的内容 grep -r "totally-generic-name" node_modules/ --include="*.js"
针对contains助手,你很快就能在ember-composable-helpers的源码目录里找到它的定义和注册代码。
有些第三方助手需要手动导入到项目里,你可以看看ember-cli-build.js里有没有类似这样的代码:
app.import('node_modules/ember-composable-helpers/dist/helpers/contains.js');
不过ember-composable-helpers在Ember 2.x里是作为addon自动注册的,这个步骤可能不是必须,但也可以排查一下。
内容的提问来源于stack exchange,提问作者Devin Rhode

