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 相关文章推荐
增强的 JavaScript 的 trim 函数的代码
Aug 13 Javascript
event.srcElement 用法笔记e.target
Dec 18 Javascript
JavaScript中的稀疏数组与密集数组[译]
Sep 17 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
Apr 13 Javascript
javascript数组去重方法汇总
Apr 23 Javascript
onmouseover事件和onmouseout事件全面理解
Aug 15 Javascript
JS实现的tab页切换效果完整示例
Dec 18 Javascript
微信小程序收货地址API兼容低版本解决方法
May 18 Javascript
jQuery 查找元素操作实例小结
Oct 02 jQuery
Vue中错误图片的处理的实现代码
Nov 07 Javascript
浅谈javascript如何获取文件后缀名
Aug 07 Javascript
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
Nov 18 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
德生S2000收音机更换“钕铁硼”全频扬声器
2021/03/02 无线电
聊天室php&mysql(五)
2006/10/09 PHP
给WordPress中的留言加上楼层号的PHP代码实例
2015/12/14 PHP
Redis构建分布式锁
2017/03/28 PHP
document.all还是document.getElementsByName?
2006/07/21 Javascript
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
jquery动感漂浮导航菜单代码分享
2020/04/15 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
jquery分页插件jquery.pagination.js使用方法解析
2016/04/01 Javascript
jQuery EasyUI中DataGird动态生成列的方法
2016/04/05 Javascript
IE和Firefox之间在JavaScript语法上的差异
2016/04/22 Javascript
AngularJS实用开发技巧(推荐)
2016/07/13 Javascript
分享JS代码实现鼠标放在输入框上输入框和图片同时更换样式
2016/09/01 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
详解vue-cli中配置sass
2017/06/21 Javascript
Node.Js生成比特币地址代码解析
2018/04/21 Javascript
vue 修改 data 数据问题并实时显示的方法
2018/08/27 Javascript
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
React 组件渲染和更新的实现代码示例
2019/02/21 Javascript
微信小程序全局变量改变监听的实现方法
2019/07/15 Javascript
详解vue中v-model和v-bind绑定数据的异同
2020/08/10 Javascript
python实现simhash算法实例
2014/04/25 Python
Python使用MySQLdb for Python操作数据库教程
2014/10/11 Python
Python自定义函数定义,参数,调用代码解析
2017/12/27 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
Django 通过JS实现ajax过程详解
2019/07/30 Python
HTML5中的Scoped属性使用实例
2014/04/23 HTML / CSS
HTML5中input[type='date']自定义样式与日历校验功能的实现代码
2017/07/11 HTML / CSS
计算机专业推荐信范文
2013/11/20 职场文书
婚礼证婚人证婚词
2014/01/08 职场文书
《雾凇》教学反思
2014/02/17 职场文书
团队精神的演讲稿
2014/05/14 职场文书
导游词之西江千户苗寨
2019/12/24 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
springboot如何初始化执行sql语句
2021/06/22 Java/Android