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 UrlDecode函数代码
Jan 09 Javascript
基于jquery的图片懒加载js
Jun 30 Javascript
基于jQuery的仿flash的广告轮播代码
Nov 04 Javascript
关于JavaScript中原型继承中的一点思考
Jul 25 Javascript
JavaScript中OnLoad几种使用方法
Dec 15 Javascript
jquery的live使用注意事项
Feb 18 Javascript
JS实现快速比较两个字符串中包含有相同数字的方法
Sep 11 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
Nov 28 Javascript
Vue实现一个无限加载列表功能
Nov 13 Javascript
React 使用recharts实现散点地图的示例代码
Dec 07 Javascript
详解vue在项目中使用百度地图
Mar 26 Javascript
layui实现checkbox的目录树tree的例子
Sep 12 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/19 PHP
PHP遍历数组的三种方法及效率对比分析
2015/02/12 PHP
php专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
简单理解PHP的面向对象编程方式
2016/05/17 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
让iframe子窗体取父窗体地址栏参数(querystring)
2009/10/13 Javascript
JavaScript 学习笔记一些小技巧
2010/03/28 Javascript
Js 时间间隔计算的函数(间隔天数)
2011/11/15 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
JS不间断向上滚动效果代码
2013/12/25 Javascript
ie7+背景透明文字不透明超级简单的实现方法
2014/01/17 Javascript
jquery each的几种常用的使用方法示例
2014/01/21 Javascript
jQuery操作cookie方法实例教程
2014/11/25 Javascript
JavaScript限定图片显示大小的方法
2015/03/11 Javascript
详解javascript实现自定义事件
2016/01/19 Javascript
详解webpack进阶之插件篇
2017/07/06 Javascript
vue通过路由实现页面刷新的方法
2018/01/25 Javascript
React key值的作用和使用详解
2018/08/23 Javascript
vue中动态添加class类名的方法
2018/09/05 Javascript
通过图带你深入了解vue的响应式原理
2019/06/21 Javascript
Vue中用JSON实现刷新界面不影响倒计时
2020/10/26 Javascript
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
2013/12/03 Python
跟老齐学Python之??碌某?? target=
2014/09/12 Python
Python实现PS滤镜特效之扇形变换效果示例
2018/01/26 Python
详解用Python实现自动化监控远程服务器
2019/05/18 Python
python的常见矩阵运算(小结)
2019/08/07 Python
python OpenCV GrabCut使用实例解析
2019/11/11 Python
Python模块future用法原理详解
2020/01/20 Python
中学教师培训制度
2014/01/31 职场文书
运动会稿件200字
2014/02/07 职场文书
关于青春的演讲稿三分钟
2014/08/22 职场文书
2014年党的群众路线教育实践活动整改措施(个人版)
2014/09/25 职场文书
鉴史问廉观后感
2015/06/10 职场文书
债务追讨律师函
2015/06/24 职场文书
vue3不同环境下实现配置代理
2022/05/25 Vue.js
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
2022/09/23 Servers