omit.js源码一览

131 阅读1分钟

本文参加了由公众号@若川视野 发起的每周源码共读活动,  点击了解详情一起参与。

【若川视野 x 源码共读】第36期 | 可能是历史上最简单的一期 omit.js 剔除对象中的属性点击了解本期详情一起参与

1.主要功能

npm i --save omit.js
var omit = require('omit.js');
omit({ name: 'Benjy', age: 18 }, [ 'name' ]); // => { age: 18 }

就是浅拷贝一个对象,并删除指定的若干属性。其中,浅拷贝使用的是 Object.assign API 。

2.测试

先看一下测试文件。

image.png

通过查看 package.json ,发现有 test 命令,实际执行的是 father test ,执行一下。

npm run test

image.png

测试是都通过了,说一下 assert.deepEqual API,这个函数的意思是测试两个对象可枚举的自身属性值是否相等(即==),子对象中的可枚举自身属性也会测试。

3.命令分析

看看 package.json 中的 main 属性是 lib/index.js ,我看了一下项目并没有这个文件,我想可能是打包后生成的,于是看到了 compile 命令。

"main": "lib/index.js",
"compile": "father build"

执行一下

npm run compile

果然生成了 lib 目录,还有 es 目录。

image.png

lib 目录是 commonjs 规范, es 是 es moudle 规范。

还有一些其他的命令, 由于能力有限,就不多说了。

"scripts": {
  "start": "father doc dev --storybook",
  "build": "father doc build --storybook",
  "compile": "father build",
  "gh-pages": "father doc deploy",
  "prepublishOnly": "npm run compile && np --yolo --no-publish",
  "lint": "eslint .",
  "test": "father test",
  "coverage": "father test --coverage"
},

4.吐槽一下

源代码只有 10 行,功能很简洁,但让我痛苦的不是看不懂,你们知道吗,它的依赖有多大, 593 M !在我这个网速不稳定的环境下,失败了 3 次,最后用 cmd 终端才安装完成。

image.png

image.png