糖浆
糖浆 很简单 答应- 基于依赖性注入框架(或更确切地说,一个库) 节点.js虽然已有许多相关努力,但Syrup试图以单一特征(依赖性分辨率)为重点并依靠Node.js来打破模具.
特征
- 配置为无. 不需要设置配置文件只是为了起起跑.
- 无魔法模块加载器. 这只是
require()而你会是那个叫它(即你完全控制)的人. - 答应-只有这样.
- 爱嘲笑。输入带有模拟依赖性的模块,以便于测试.
- 无侵取相. 你可以用糖浆 在你的应用程序的一部分.
- 与可选序列模式平行运行.
- 船舶类型文稿申报.
所需资源
- 节点.js 22岁或更新。 旧版本不支持 .
开始
通过国家预防机制安装:
npm install --save @devicefarmer/stf-syrup
模块声明其依赖性 .dependency() 及其躯体 .define(). 机构收到每个依附物的价值的选项,按依附物添加顺序排列:
var syrup = require('@devicefarmer/stf-syrup')
var box = syrup()
.define(function(options) {
return {
put: function(thing) {
return Promise.resolve(thing)
}
}
})
module.exports = syrup({size: 'large'})
.dependency(box)
.define(function(options, box) {
return box
})
.consume(options) 解决每个依赖,然后叫身体 并返回一个本地 Promise 以什么物配主, 每个模块只消耗一次:若干其他模块依赖一次运行,它们都分享其价值,而且每晚 .consume() 返回同样的承诺,无论给予什么选项。 选项中填入模块的默认选项,即给 syrup()。 。 。 .
syrup() 消耗并行的依赖. syrup.serial() 一次消耗一次 一次解决一次.
类型脚本
该包被用TypeScript来写出,并用船载其申报. syrup.Syrup<T> 模块的类型 .consume() 决定: T,以及 .define() 推断 T 从身体:
import syrup from '@devicefarmer/stf-syrup'
const answer = syrup.serial().define((options: {base: number}) => options.base + 41)
// answer.consume() is a Promise<number>, and answer is a syrup.Syrup<number>
从1.x升级
.consume() 用于返回 a 蓝鸟 1.x承诺,现在返回本地 Promise在结果上称为只使用蓝鸟方法的代码,例如 .spread(), (中文(简体) ), .tap() 或者说 .isFulfilled(),必须改变。 与任何本地人的承诺一样,一个现在没有任何办法的拒绝使得Node.js离开而不是被登录.
可移动性
差不多一样 建筑师,您可以通过向模块传递自己的模拟依赖来直接引用模块.
存档.js
var syrup = require('@devicefarmer/stf-syrup')
module.exports = syrup()
.dependency(require('./box'))
.define(function(options, box) {
return {
store: function(thing) {
return box.put(thing)
}
}
})
存档- test.js
var sinon = require('sinon')
var chai = require('chai')
chai.use(require('sinon-chai'))
var expect = chai.expect
var archive = require('./archive')
describe('archive', function() {
it('should put the thing in the box', function() {
var mockBox = {
put: sinon.spy()
}
var treasure = 42
archive.invoke(null, mockBox).store(treasure)
expect(mockBox.put).to.have.been.calledWith(treasure)
})
})
捐款
见 捐款额。 。 。 .
许可证
见 自由主义。 。 。 .
版权所有 网络代理公司,所有权利保留.