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 相关文章推荐
基于Jquery的开发个代阴影的对话框效果代码
Jul 28 Javascript
JS对象与JSON格式数据相互转换
Feb 20 Javascript
jquery插件制作教程 txtHover
Aug 17 Javascript
跟我学习javascript的垃圾回收机制与内存管理
Nov 23 Javascript
JS输出空格的简单实现方法
Sep 08 Javascript
form表单转Json提交的方法(推荐)
Sep 23 Javascript
浅谈FastClick 填坑及源码解析
Mar 02 Javascript
详解Axios统一错误处理与后置
Sep 26 Javascript
详解node字体压缩插件font-spider的用法
Sep 28 Javascript
详解Webpack loader 之 file-loader
Nov 07 Javascript
antd组件Upload实现自己上传的实现示例
Dec 18 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
Sep 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
汇总PHPmailer群发Gmail的常见问题
2016/02/24 PHP
ThinkPHP3.2.1图片验证码实现方法
2016/08/19 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
2016/10/17 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
2017/11/28 PHP
PHP判断函数是否被定义的方法
2019/06/21 PHP
jquery.pagination.js 无刷新分页实现步骤分享
2012/05/23 Javascript
JavaScript 图像动画的小demo
2012/05/23 Javascript
js中top的作用深入剖析
2014/03/04 Javascript
2014年最火的Node.JS后端框架推荐
2014/10/27 Javascript
jQuery超精致图片轮播幻灯片特效代码分享
2015/09/10 Javascript
jQuery实现根据滚动条位置加载相应内容功能
2016/07/18 Javascript
浅述Javascript的外部对象
2016/12/07 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
微信小程序switch组件使用详解
2018/01/31 Javascript
让你5分钟掌握9个JavaScript小技巧
2018/06/09 Javascript
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
浅析vue给不同环境配置不同打包命令
2018/08/17 Javascript
Ant Design moment对象和字符串之间的相互转化教程
2020/10/27 Javascript
[02:11]完美世界DOTA2联赛10月28日赛事精彩集锦:来吧展示实力强劲
2020/10/29 DOTA
Python处理CSV与List的转换方法
2018/04/19 Python
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
原生python实现knn分类算法
2019/10/24 Python
tensorflow入门:TFRecordDataset变长数据的batch读取详解
2020/01/20 Python
html5贪吃蛇游戏使用63行代码完美实现
2013/06/25 HTML / CSS
StubHub西班牙:购买和出售全球活动门票
2017/06/05 全球购物
来自美国主售篮球鞋的零售商店:KICKSUSA
2017/11/28 全球购物
美国排名第一的泳池用品直接来源:In The Swim
2019/09/23 全球购物
主键(Primary Key)约束和唯一性(UNIQUE)约束的区别
2013/05/29 面试题
银行实习自我鉴定
2013/10/12 职场文书
心得体会开头
2014/01/01 职场文书
学生会竞聘书范文
2014/03/31 职场文书
群众路线专项整治方案
2014/10/27 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
党员考试作弊检讨书1000字
2015/02/16 职场文书
怎么用Python识别手势数字
2021/06/07 Python
python playwright 自动等待和断言详解
2021/11/27 Python