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 相关文章推荐
window.open()弹出居中的窗口
Feb 01 Javascript
JAVASCRIPT keycode总结
Feb 04 Javascript
读jQuery之十 事件模块概述
Jun 27 Javascript
jquery.pagination.js 无刷新分页实现步骤分享
May 23 Javascript
js给网页加上背景音乐及选择音效的方法
Mar 03 Javascript
JS针对Array的各种操作汇总
Nov 29 Javascript
AngularJS入门教程之路由机制ngRoute实例分析
Dec 13 Javascript
本地Bootstrap文件字体图标引入却无法显示问题的解决方法
Apr 18 Javascript
javascript将url解析为json格式的两种方法
Aug 18 Javascript
vue-router路由懒加载和权限控制详解
Dec 13 Javascript
jquery获取input输入框中的值
Nov 13 jQuery
iview实现图片上传功能
Jun 29 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
apache php模块整合操作指南
2012/11/16 PHP
php ctype函数中文翻译和示例
2014/03/21 PHP
php实例分享之二维数组排序
2014/05/15 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
2016/08/17 PHP
jquery中交替点击事件的实现代码
2014/02/14 Javascript
JavaScript中遍历对象的property的3种方法介绍
2014/12/30 Javascript
jQuery过滤选择器详解
2015/01/13 Javascript
jQuery获取页面元素绝对与相对位置的方法
2015/06/10 Javascript
四种参数传递的形式——URL,超链接,js,form表单
2015/07/24 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
2015/08/11 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
jQuery中数据缓存$.data的用法及源码完全解析
2016/04/29 Javascript
jQuery Validate插件实现表单验证
2016/08/19 Javascript
jQuery simpleModal插件的使用介绍
2016/08/30 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
2017/02/09 Javascript
微信小程序获取手机号授权用户登录功能
2017/11/09 Javascript
AngularJS实现的生成随机数与猜数字大小功能示例
2017/12/25 Javascript
讲解vue-router之命名路由和命名视图
2018/05/28 Javascript
vue-router 源码之实现一个简单的 vue-router
2018/07/02 Javascript
详解原生JS动态添加和删除类
2019/03/26 Javascript
[59:15]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.20
2020/11/20 DOTA
python使用socket连接远程服务器的方法
2015/04/29 Python
Python对象中__del__方法起作用的条件详解
2018/11/01 Python
详解Python的循环结构知识点
2019/05/20 Python
Python使用MyQR制作专属动态彩色二维码功能
2019/06/04 Python
python实现网站用户名密码自动登录功能
2019/08/09 Python
python try except返回异常的信息字符串代码实例
2019/08/15 Python
美国领先的家居装饰和礼品商店:Kirkland’s
2017/01/30 全球购物
医学护理系毕业生求职信
2013/10/01 职场文书
七一党建活动方案
2014/01/28 职场文书
监察建议书格式
2014/05/19 职场文书
学习党的群众路线实践活动思想汇报
2014/09/12 职场文书
餐厅收银员岗位职责
2015/04/07 职场文书
工会文体活动总结
2015/05/07 职场文书
CSS中em的正确打开方式详解
2021/04/08 HTML / CSS
Python利用folium实现地图可视化
2021/05/23 Python