bearcat - 让前端也流畅使用依赖注入
发布于 10 年前 作者 fantasyni 8249 次浏览 最后一次编辑是 8 年前 来自 分享

bearcat 0.3 版本在圣诞正式推出
bearcat 不再仅仅支持node.js环境,浏览器环境也完美支持
意味着 前端也可以编写基于自描述js对象的依赖注入
依赖关系基于js对象属性的自描述,无需使用require, define来进行模块管理
同时bearcat还内建了script脚本异步加载机制,无需打包,前端模块化开发所见即所得
10秒例子,car 依赖 engine,解析到car依赖后,engine就自动加载并注入到car中

var Car = function() {
    this.$id = "car";
    this.$engine = null;
}

Car.prototype.run = function() { 
    this.$engine.run(); 
    console.log('run car...');
}

bearcat.module(Car, typeof module !== 'undefined' ? module : {});
var Engine = function() {
    this.$id = "engine";
}

Engine.prototype.run = function() {
    console.log('run engine...');
}

bearcat.module(Engine, typeof module !== 'undefined' ? module : {});

详情还请到官网 http://bearcatjs.org/
sweet例子 http://bearcatjs.org/examples/

15 回复

什么原理?

@yakczh 估计和angular是一样的,函数转字符串,然后正则,注入

@i5ting 恩,原理都是解析依赖关系,然后注入 bearcat 比 angular.js 的依赖注入,还多了异步加载script 这样子,开发者就不用自己管理script的加载
或者蛋疼的再用AMD这种模块加载器来描述依赖关系,再进行加载

应该打上一个网易出品,估计关注人就多了

这种严格依赖命名吧?我觉得还是没有require或者define显式申明来得直观

@chemdemo 是基于 id 的,这样子可以实现松散耦合,require 这种就是与路径,文件名耦合了,依赖注入和模块系统(require)还是不一样的

@yaochun 哈哈,先靠项目和口碑,老外不一定吃网易的牌子

@fantasyni 支持这种注入不? var Car = function() { this.$id = “car”; this["$engine"] = null;//这里不使用点域声明属性,使用[]括号 var engineName = “$engine”; this[engineName] = null;//这里不使字符串,使用变量 };

Car.prototype["$engine"] = null;//这里不使用点域声明属性,使用[]括号

@hainee 哈哈,暂时不支持,因为还要考虑 放在参数列表里面的注入形式,所以目前的做法是 function.toString() 然后做正则匹配
你这种支持如果不考虑参数列表里面的话,可以直接先 new 一个对象出来,然后遍历一下属性就肯定没问题了
不过这个确实是有这么个问题哈

@hainee 已经支持了,在最新版本,例子 bearcat 复杂注入,欢迎继续提出意见哈

赞一个!!!有了这两个特性,可以更愉快的玩耍了!!!辛苦了,楼主! 还有,可以不使用$前缀么?

@hainee 这个当然可以啊,还没弄,可以考虑支持一下 自定义 前缀,比如想要 _$$ 这种开头的

@fantasyni 或则没有$开头,不过无所谓了,已经很好了……^_^

有什么优势么?

bearcat是已经被放弃了吗,看到好久没有维护了

回到顶部