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 相关文章推荐
如何取得中文输入的真实长度?
Jun 24 Javascript
用js遍历 table的脚本
Jul 23 Javascript
使用Mootools动态添加Css样式表代码,兼容各浏览器
Dec 12 Javascript
js定时器怎么写?就是在特定时间执行某段程序
Oct 11 Javascript
js验证IP及子网掩码的合法性有效性示例
Apr 30 Javascript
JavaScript焦点事件、鼠标事件和滚轮事件使用详解
Jan 15 Javascript
js基于cookie记录来宾姓名的方法
Jul 19 Javascript
微信小程序 WXDropDownMenu组件详解及实例代码
Oct 24 Javascript
vue实现消息的无缝滚动效果的示例代码
Dec 05 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
Mar 27 Javascript
在layui中对table中的数据进行判断(0、1)转换为提示信息的方法
Sep 28 Javascript
js实现简单的轮播图效果
Dec 13 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
风格模板初级不完全修改教程
2006/10/09 PHP
一个经典实用的PHP图像处理类分享
2014/11/18 PHP
经典PHP加密解密函数Authcode()修复版代码
2015/04/05 PHP
用正则xmlHttp实现的偷(转)
2007/01/22 Javascript
jquery和javascript中如何将一元素的内容赋给另一元素
2014/01/09 Javascript
javascript里使用php代码实例
2014/12/13 Javascript
js实现百度联盟中一款不错的图片切换效果完整实例
2015/03/04 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
很棒的js Tab选项卡切换效果
2016/08/30 Javascript
关于Stream和Buffer的相互转换详解
2017/07/26 Javascript
基于node.js之调试器详解
2017/08/22 Javascript
学习Vue组件实例
2018/04/28 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
vue-cli中安装方法(图文详细步骤)
2018/12/12 Javascript
vue实现拖拽效果
2019/12/23 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
python格式化字符串实例总结
2014/09/28 Python
python自动化脚本安装指定版本python环境详解
2017/09/14 Python
PyTorch的深度学习入门之PyTorch安装和配置
2019/06/27 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
python通过matplotlib生成复合饼图
2020/02/06 Python
Python3 Click模块的使用方法详解
2020/02/12 Python
html5 Canvas实现图片旋转的示例
2018/01/15 HTML / CSS
Canvas获取视频第一帧缩略图的实现
2020/11/11 HTML / CSS
全球性的在线商店:Vogca
2019/05/10 全球购物
保安员岗位职责
2013/11/17 职场文书
《少年王冕》教学反思
2014/04/11 职场文书
双拥工作宣传标语
2014/06/26 职场文书
四风问题班子对照检查材料
2014/09/27 职场文书
2014年职称评定工作总结
2014/11/26 职场文书
学习保证书100字
2015/02/26 职场文书
2015年初一班主任工作总结
2015/05/13 职场文书
使用CSS设置滚动条样式
2022/01/18 HTML / CSS
Java实现经典游戏泡泡堂的示例代码
2022/04/04 Java/Android
DIY胆机必读:各国电子管评价
2022/04/06 无线电
笔记本自带的win11如何跳过联网激活?
2022/04/20 数码科技