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 相关文章推荐
使用户点击后退按钮使效三行代码
Jul 07 Javascript
javascript 获取url参数和script标签中获取url参数函数代码
Jan 22 Javascript
js实现百度联盟中一款不错的图片切换效果完整实例
Mar 04 Javascript
AngularJS 2.0新特性有哪些
Feb 18 Javascript
Bootstrap基本插件学习笔记之轮播幻灯片(23)
Dec 08 Javascript
JS 调试中常见的报错问题解决方法
May 20 Javascript
微信小程序 页面滑动事件的实例详解
Oct 12 Javascript
修改npm全局安装模式的路径方法
May 15 Javascript
Vue CLI 3.x 自动部署项目至服务器的方法
Apr 02 Javascript
jQuery 选择方法及$(this)用法实例分析
May 19 jQuery
解决vue+router路由跳转不起作用的一项原因
Jul 19 Javascript
js实现前端界面导航栏下拉列表
Aug 27 Javascript
实现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利用正则表达式解决采集内容排版的问题
2013/06/20 PHP
php获取新浪微博数据API实例
2013/11/12 PHP
使用PHPExcel导出Excel表
2018/09/08 PHP
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
JS 毫秒转时间示例代码
2013/09/22 Javascript
document.forms[].submit()使用介绍
2014/02/19 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
2016/06/17 Javascript
jQuery中常用动画效果函数(日常整理)
2016/09/17 Javascript
jquery日历插件e-calendar升级版
2016/11/10 Javascript
jQuery Validate表单验证插件实现代码
2017/06/08 jQuery
JavaScript中toLocaleString()和toString()的区别实例分析
2018/08/14 Javascript
vue-cli3配置与跨域处理方法
2019/08/17 Javascript
Quasar Input:type="number" 去掉上下小箭头 实现加减按钮样式功能
2020/04/09 Javascript
[02:26]2018DOTA2亚洲邀请赛赛前采访-Newbee篇
2018/04/03 DOTA
[01:07:57]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第二场 1月19日
2021/03/11 DOTA
Python3通过Luhn算法快速验证信用卡卡号的方法
2015/05/14 Python
python追加元素到列表的方法
2015/07/28 Python
python多维数组分位数的求取方式
2020/03/03 Python
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
台湾母婴用品购物网站:Infant婴之房
2018/06/15 全球购物
巴西Mr. Cat在线商店:购买包包和鞋子
2019/09/08 全球购物
精彩的大学生自我评价
2013/11/17 职场文书
施工安全协议书
2013/12/11 职场文书
党课学习思想汇报
2014/01/02 职场文书
总经理司机职责
2014/02/02 职场文书
公司股东合作协议书
2014/09/14 职场文书
运动会报道稿300字
2014/10/02 职场文书
民事赔偿协议书
2014/11/02 职场文书
2014年小学教学工作总结
2014/11/13 职场文书
2014年林业工作总结
2014/12/05 职场文书
领导干部考核评语
2015/01/04 职场文书
2015安全保卫工作总结
2015/04/25 职场文书
选调生挂职锻炼工作总结
2015/10/23 职场文书
python实现调用摄像头并拍照发邮箱
2021/04/27 Python
Go语言 详解net的tcp服务
2022/04/14 Golang