- 本文参加了由公众号@若川视野 发起的每周源码共读活动, 点击了解详情一起参与。
- 这是源码共读的第33期,链接:juejin.cn/post/710021… 。
一、 Arrify代码阅读
package.json回顾
从github拉取代码后发现本次代码结构和之前的不太一样,之前看过package.json文件的介绍(链接:juejin.cn/post/709904…),首先对package.json文件进行查看,查看项目的入口文件,发现没有main属性,再回顾发现包含export属性
这个字段所定义的内容就是该npm包的真实和全部的导出,优先级高于main和file等字段
因此可以直接根据此属性去往index.js文件查看npm包的主要功能。
代码解读
初步阅读,大致可以看出函数的主要功能在于将其他类型数据转化为数组
但是没明白Symbol.iterator这个API的主要功能,于是去MDN搜了一下,结合参考ES6标准入门(es6.ruanyifeng.com/#docs/itera…)可知:
Symbol.iterator 为每一个对象定义了默认的迭代器。该迭代器可以被 for...of 循环使用
[...value]表示返回value的每一项展开的数组
可以理解为判断某个数据结构是否部署 Iterator 接口
只要某个数据结构部署了 Iterator 接口,就可以对它使用扩展运算符,将其转换为数组
一个数据结构只要部署了Symbol.iterator属性,就被视为具有 iterator 接口,就可以用for...of循环遍历它的成员
二、 单元测试
再回到package.json文件
可知这个包有三个依赖:xo(代码格式化)、ava(并行测试)、tsd(ts类型定义)
执行测试命令:
npm run test
即同时运行代码格式化命令、测试命令及ts类型定义测试命令
运行完还有十几个报错
是因为tsd包引起的,(在test命令中去掉tsd后报错就消失)但是看了半天看不懂ts只能被迫放弃,希望有大佬解决这个问题后戳戳我
三、 总结
收获:
1. 了解package.json文件各属性
2. Symbol.iterator方法及iterator迭代器使用
3. xo、ava、tsd包
问题:
未解决运行tsd报错问题