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动态改变图片IMG的src地址示例
Jun 25 Javascript
让网页跳转到指定位置的jquery代码非书签
Sep 06 Javascript
javascript特殊用法示例介绍
Nov 29 Javascript
jQuery简易图片放大特效示例代码
Jun 09 Javascript
jQuery判断指定id的对象是否存在的方法
May 22 Javascript
使用vue-infinite-scroll实现无限滚动效果
Jun 22 Javascript
Vue全局分页组件的实现代码
Aug 10 Javascript
Bootstrap Table 双击、单击行获取该行及全表内容
Aug 31 Javascript
vue项目中使用scss的方法步骤
May 16 Javascript
微信小程序实现Swiper轮播图效果
Nov 22 Javascript
vue项目打包之开发环境和部署环境的实现
Apr 23 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
May 07 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
怎样辨别一杯好咖啡
2021/03/03 新手入门
PHP,ASP.JAVA,JAVA代码格式化工具整理
2010/06/15 PHP
PHP的构造方法,析构方法和this关键字详细介绍
2013/10/22 PHP
通过curl模拟post和get方式提交的表单类
2014/04/23 PHP
Codeigniter(CI)框架分页函数及相关知识
2014/11/03 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
用javascript来实现动画导航效果的代码
2007/12/16 Javascript
JQuery 图片滚动轮播示例代码
2014/03/24 Javascript
jQuery实现按钮只点击一次后就取消点击事件绑定的方法
2015/06/26 Javascript
jquery实现横向图片轮播特效代码分享
2015/11/19 Javascript
实例讲解javascript注册事件处理函数
2016/01/09 Javascript
WordPress 单页面上一页下一页的实现方法【附代码】
2016/03/10 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
2016/08/01 Javascript
手机端点击图片放大特效PhotoSwipe.js插件实现
2016/08/24 Javascript
利用node.js制作命令行工具方法教程(一)
2017/06/22 Javascript
AngularJS常见过滤器用法实例总结
2017/07/06 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
2018/01/22 jQuery
浅析vue给不同环境配置不同打包命令
2018/08/17 Javascript
一个小时快速搭建微信小程序的方法步骤
2019/04/15 Javascript
详解Vue源码中一些util函数
2019/04/24 Javascript
vue组件间通信六种方式(总结篇)
2019/05/15 Javascript
javascript实现京东登录显示隐藏密码
2020/08/02 Javascript
[03:03]DOTA2校园争霸赛 济南城市决赛欢乐发奖活动
2013/10/21 DOTA
Python中多线程的创建及基本调用方法
2016/07/08 Python
Python能做什么
2020/06/02 Python
CSS3之多背景background使用示例
2013/10/18 HTML / CSS
“型”走纽约上东区:Sam Edelman
2017/04/02 全球购物
播音主持女孩的自我评价分享
2013/11/20 职场文书
青年文明号创建承诺
2014/03/31 职场文书
自愿解除劳动合同协议书
2014/09/11 职场文书
警察群众路线整改措施
2014/09/26 职场文书
初中生散播谣言检讨书
2014/11/17 职场文书
综合测评自我评价
2015/03/06 职场文书
企业投资意向书
2015/05/09 职场文书
情侣之间的道歉短信
2015/05/12 职场文书
世界名著读书笔记
2015/06/25 职场文书