Node.js如何优雅的封装一个实用函数的npm包的方法


Posted in Javascript onApril 29, 2019

为什么要封装一个实用函数的 npm 包?

当你连续写了多个 Node 应用, 都想要 console 漂亮一点, 你可能会像下面这样封装一个函数

import chalk from "chalk";

function noop(msg: string): string {
  return msg
}

function log(fn: Function): (msg: string) => void {
  return (msg: string): void => {
    console.log(fn(msg));
  };
}

export default {
  success: log(chalk.green),
  error: log(chalk.red),
  warn: log(chalk.yellow),
  info: log(chalk.cyan),
  log: log(noop)
};

调用方式

import log from './log'
log.success("hello green message!")
log.error("hello red message!")
log.warn("hello yellow message!")
log.info("hello cyan message!")
log.log("hello normal message!")

慢慢的发现每个项目都需要这么一个 log 文件, 是的! 我们此时可以考虑把这些常用的函数封装集合到一个 npm 包里面了!

需要注意的事项有哪些

单元测试

考虑到代码量的增加以及贡献者的增加事先加入单元测试是很有必要的

  • 测试框架 - Mocha 是一个功能丰富的Javascript测试框架,它能运行在Node.js和浏览器中,支持BDD、TDD、QUnit、Exports式的测试
  • 断言库 - assert 是 Node 自带的

持续集成

Node.js如何优雅的封装一个实用函数的npm包的方法

Travis CI 提供的是持续集成服务(Continuous Integration,简称 CI)。它绑定 Github 上面的项目,只要有新的代码,就会自动抓取。然后,提供一个运行环境,执行测试,完成构建,还能部署到服务器。

Node.js如何优雅的封装一个实用函数的npm包的方法

代码层面

扩展开放, 修改关闭的设计原则

当 src 目录新增一个实用函数文件, index.ts 能够自动抓取然后挂载在 module.export 上

通过 getter 巧妙的实现懒加载导出的功能

Object.defineProperty(module.export, 'log', {
  configurable: false,
  enumerable: true,
  get: () => require('./log')
});

项目地址

https://github.com/xiaoxiaojx/enhanced 欢迎 ? Star ? 和 Pr  和 在项目中使用~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Extjs学习笔记之八 继承和事件基础
Jan 08 Javascript
js自定义方法通过隐藏iframe实现文件下载
Feb 21 Javascript
javascript陷阱 一不小心你就中招了(字符运算)
Nov 10 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
Jun 16 Javascript
js仿土豆网带缩略图的焦点图片切换效果实现方法
Feb 23 Javascript
JS组件Bootstrap Table表格多行拖拽效果实现代码
Dec 08 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
Jun 22 Javascript
js实现抽奖效果
Mar 27 Javascript
windows下vue-cli及webpack搭建安装环境
Apr 25 Javascript
通过jQuery学习js类型判断的技巧
May 27 jQuery
如何使用proxy实现一个简单完整的MVVM库的示例代码
Sep 17 Javascript
vue 动态生成拓扑图的示例
Jan 03 Vue.js
实现elementUI表单的全局验证的方法步骤
Apr 29 #Javascript
深入浅析Vue 中 ref 的使用
Apr 29 #Javascript
详解微信小程序实现跑马灯效果(附完整代码)
Apr 29 #Javascript
vue中利用simplemde实现markdown编辑器(增加图片上传功能)
Apr 29 #Javascript
微信小程序调用微信支付接口的实现方法
Apr 29 #Javascript
vue实现微信分享链接添加动态参数的方法
Apr 29 #Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
Apr 29 #Javascript
You might like
一篇不错的PHP基础学习笔记
2007/03/18 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
PHP使用两个栈实现队列功能的方法
2018/01/15 PHP
?牟┛途W扣了一??效果出?? target=
2007/05/27 Javascript
javascript 全等号运算符使用说明
2010/05/31 Javascript
关于JAVASCRIPT urldecode URL解码的问题
2012/01/08 Javascript
jquery创建一个新的节点对象(自定义结构/内容)的好方法
2013/01/21 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
jquery dialog open后,服务器端控件失效的快速解决方法
2013/12/19 Javascript
javascript函数重载解决方案分享
2014/02/19 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
进阶之初探nodeJS
2017/01/24 NodeJs
详解angular2实现ng2-router 路由和嵌套路由
2017/03/24 Javascript
详解用webpack的CommonsChunkPlugin提取公共代码的3种方式
2017/11/09 Javascript
Vue2.0设置全局样式(less/sass和css)
2017/11/18 Javascript
vue-router配合ElementUI实现导航的实例
2018/02/11 Javascript
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
Puppet的一些技巧
2018/09/17 Javascript
js canvas实现写字动画效果
2018/11/30 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
python模拟登录百度贴吧(百度贴吧登录)实例
2013/12/18 Python
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
对python实时得到鼠标位置的示例讲解
2018/10/14 Python
Django+Xadmin构建项目的方法步骤
2019/03/06 Python
利用Python pandas对Excel进行合并的方法示例
2020/11/04 Python
澳大利亚婴儿礼品公司:The Baby Gift Company
2018/11/04 全球购物
Pop In A Box英国:Funko POP搪胶公仔
2019/05/27 全球购物
String和StringBuffer的区别
2015/08/13 面试题
yy结婚证婚词
2014/01/10 职场文书
幼儿园春季开学寄语
2014/04/03 职场文书
党的群众路线教育实践活动个人对照检查材料(乡镇)
2014/11/05 职场文书
签订劳动合同通知书
2015/04/16 职场文书
CSS 实现多彩、智能的阴影效果
2021/05/12 HTML / CSS
C#连接ORACLE出现乱码问题的解决方法
2021/10/05 Oracle
Elasticsearch 批量操作
2022/04/19 Python