Verdaccio publish 时包含 deprecated 导致历史版本丢失问题原因分析

2021-12-13
阅读 2 分钟
3.5k
公司内部的 NPM 因为一些固有的 bug 经常被吐槽,最近刚好有时间可以来做优化,然后就尝试解一下之前遇到的一个 publish 的 bug,下边是分析记录。

记一个生产工具过于智能导致的坑

2021-07-16
阅读 5 分钟
6.3k
背景近期在做一个 proto 文件处理的 CLI 工具,之前使用 proto 文件,一般分为两种方式:直接引用 proto 文件,采用运行时动态生成 JS 代码通过 protoc 工具生成对应的 JS 文件,并在项目中引用后者性能会更高一些,因为编译过程在程序运行之前,所以一般会采用后者来使用。问题现象因为是一个通用的工具,所以 proto 文...

记一次 Node.js http 服务的排障记录

2021-07-06
阅读 5 分钟
4.1k
最近我们团队接手了一个遗留项目,是由 Node.js 语言所编写的 HTTP 服务项目,项目大致逻辑是通过 Node.js 来实现一层代理逻辑,做流量的中转,并添加一些关键的埋点来展示请求记录( 以及一些进阶的用法,篡改请求相关的数据,但与本次排障无关,便不赘述 )。刚接手的时候我们得到的情况是,这个项目因为内存泄漏和其...

ioredis源码阅读[1]

2021-06-04
阅读 5 分钟
3.4k
上次针对 redis 的源码阅读涉及普通的 client,这次针对 cluster 模式下的 client 源码进行分析。 具体的源码路径就是在 lib/cluster 目录下了。

ioredis源码阅读[0]

2020-12-15
阅读 12 分钟
4k
最近因为工作需要,要去搞一个 Node.js 端的 Redis Client 组件出来,暂时选择通过 ioredis 来作为 fork 对象。 因为之前有遇到过 Redis 在使用 twemproxy 时会一直出现无法连接服务器的问题,详情见 issues:[链接] 所以会修改源码修改这一问题,不过在修改完成之后跑单元测试发现,事情没有那么简单,并不只是 info -&...

grpc-node 源码阅读笔记[0]

2020-12-01
阅读 15 分钟
4.6k
我所理解 RPC 整个执行的过程就是 Client 调用方法 -> 序列化请求参数 -> 传输数据 -> 反序列化请求参数 -> Server 处理请求 -> 序列化返回数据 -> 传输数据 -> Client 接收到方法返回值:

如何写一个简单的node.js c++扩展

2020-08-08
阅读 8 分钟
5.9k
node 是由 c++ 编写的,核心的 node 模块也都是由 c++ 代码来实现,所以同样 node 也开放了让使用者编写 c++ 扩展来实现一些操作的窗口。 如果大家对于 require 函数的描述还有印象的话,就会记得如果不写文件后缀,它是有一个特定的匹配规则的:

GitLab CI/CD 在 Node.js 项目中的实践

2019-05-30
阅读 10 分钟
8.4k
近期在按照业务划分项目时,我们组被分了好多的项目过来,大量的是基于 Node.js 的,也是我们组持续在使用的语言。 现有流程中的一些问题 在维护多个项目的时候,会暴露出一些问题: 如何有效的使用 测试用例 如何有效的使用 ESLint 部署上线还能再快一些吗 使用了 TypeScript 以后带来的额外成本 测试用例 首先是测试用...

使用JSDoc提高代码的可读性

2019-04-22
阅读 6 分钟
6.3k
工作了四年多,基本上都在围绕着 JavaScript 做事情。 写的代码多了,看的代码也多了,由衷的觉得,写出别人看不懂的代码并不是什么能力,写出所有人都能读懂的代码,才是真的牛X。 众所周知, JavaScript 是一个弱类型的脚本语言,这就意味着,从编辑器中并不能直观的看出这段代码的作用是什么,有些事情只有等到代码真...

Node程序debug小记

2019-01-17
阅读 7 分钟
2.4k
有时候,所见并不是所得,有些包,你需要去翻他的源码才知道为什么会这样。 背景 今天调试一个程序,用到了一个很久之前的NPM包,名为formstream,用来将form表单数据转换为流的形式进行接口调用时的数据传递。 这是一个几年前的项目,所以使用的是Generator+co实现的异步流程。 其中有这样一个功能,从某处获取一些图片...

2018年终总结

2018-12-25
阅读 3 分钟
4.4k
转眼间,2018年就要过去了,又可以来总结一年的得失了。 今年可以说是充满了收获与挑战的一年,一年的工作基本上是围绕着node来进行的,前端相关的东西是做的越来越少。

基于游标的分页接口实现

2018-11-12
阅读 6 分钟
6k
接口传入请求的页码、以及每页要请求的条数,我个人猜想这可能和大家初学的时候所接触的数据库有关吧- -,我所认识的人里边,先接触MySQL、SQL Server什么的比较多一些,以及类似的SQL语句,在查询的时候基本上就是这样的一个分页条件:

了解可执行的NPM包

2018-10-26
阅读 5 分钟
6.7k
NPM是Node.js的包管理工具,随着Node.js的出现,以及前端开发开始使用gulp、webpack、rollup以及其他各种优秀的编译打包工具(大多数采用Node.js来实现),大家都开始接触到一些Node.js,发现了使用NPM来管理一些第三方模块会很方便。 大家搬砖的模式也是从之前的去插件官网下载XXX.min.js改为了npm install XXX,然后在...

util.promisify 的那些事儿

2018-10-18
阅读 5 分钟
12.3k
util.promisify是在node.js 8.x版本中新增的一个工具,用于将老式的Error first callback转换为Promise对象,让老项目改造变得更为轻松。

如何编写 Typescript 声明文件

2018-10-15
阅读 7 分钟
9.6k
使用TypeScript已经有了一段时间,这的确是一个好东西,虽说在使用的过程中也发现了一些bug,不过都是些小问题,所以整体体验还是很不错的。

async语法升级踩坑小记

2018-09-28
阅读 6 分钟
5.5k
从今年过完年回来,三月份开始,就一直在做重构相关的事情。 就在今天刚刚上线了最新一次的重构代码,希望高峰期安好,接近半年的Node.js代码重构。 包含从callback+async.waterfall到generator+co,统统升级为了async,还顺带推动了TypeScript在我司的使用。 这些日子也踩了不少坑,也总结了一些小小的优化方案,进行精...

适配器在JavaScript中的体现

2018-09-19
阅读 4 分钟
4.7k
适配器设计模式在JavaScript中非常有用,在处理跨浏览器兼容问题、整合多个第三方SDK的调用,都可以看到它的身影。 其实在日常开发中,很多时候会不经意间写出符合某种设计模式的代码,毕竟设计模式就是老前辈们总结提炼出来的一些能够帮助提升开发效率的一些模版,源于日常的开发中。 而适配器其实在JavaScript中应该是...

使用TS+Sequelize实现更简洁的CRUD

2018-09-10
阅读 8 分钟
15.1k
如果是经常使用Node来做服务端开发的童鞋,肯定不可避免的会操作数据库,做一些增删改查(CRUD,Create Read Update Delete)的操作,如果是一些简单的操作,类似定时脚本什么的,可能就直接生写SQL语句来实现功能了,而如果是在一些大型项目中,数十张、上百张的表,之间还会有一些(一对多,多对多)的映射关系,那么...

使用 TypeScript 改造构建工具及测试用例

2018-09-03
阅读 6 分钟
4.3k
最近的一段时间一直在搞TypeScript,一个巨硬出品、赋予JavaScript语言静态类型和编译的语言。 第一个完全使用TypeScript重构的纯Node.js项目已经上线并稳定运行了。 第二个前后端的项目目前也在重构中,关于前端基于webpack的TypeScript套路之前也有提到过:TypeScript在react项目中的实践。

TypeScript在react项目中的实践

2018-08-27
阅读 9 分钟
12.6k
前段时间有写过一个TypeScript在node项目中的实践。 在里边有解释了为什么要使用TS,以及在Node中的一个项目结构是怎样的。 但是那仅仅是一个纯接口项目,碰巧赶上近期的另一个项目重构也由我来主持,经过上次的实践以后,尝到了TS所带来的甜头,毫不犹豫的选择用TS+React来重构这个项目。 这次的重构不仅包括Node的重构...

koa源码阅读[3]-koa-send与它的衍生(static)

2018-08-24
阅读 8 分钟
6.1k
处理静态文件是一个繁琐的事情,因为静态文件都是来自于服务器上,肯定不能放开所有权限让接口来读取。 各种路径的校验,权限的匹配,都是需要考虑到的地方。 而koa-send和koa-static就是帮助我们处理这些繁琐事情的中间件。 koa-send是koa-static的基础,可以在NPM的界面上看到,static的dependencies中包含了koa-send。

微任务、宏任务与Event-Loop

2018-08-16
阅读 9 分钟
8.4k
首先,JavaScript是一个单线程的脚本语言。 所以就是说在一行代码执行的过程中,必然不会存在同时执行的另一行代码,就像使用alert()以后进行疯狂console.log,如果没有关闭弹框,控制台是不会显示出一条log信息的。 亦或者有些代码执行了大量计算,比方说在前端暴力破解密码之类的鬼操作,这就会导致后续代码一直在等待...

koa源码阅读[2]-koa-router

2018-08-09
阅读 24 分钟
4.9k
首先,因为koa是一个管理中间件的平台,而注册一个中间件使用use来执行。 无论是什么请求,都会将所有的中间件执行一遍(如果没有中途结束的话) 所以,这就会让开发者很困扰,如果我们要做路由该怎么写逻辑?

koa源码阅读[1]-koa与koa-compose

2018-07-30
阅读 12 分钟
3.7k
接上次挖的坑,对koa2.x相关的源码进行分析 第一篇。 不得不说,koa是一个很轻量、很优雅的http框架,尤其是在2.x以后移除了co的引入,使其代码变得更为清晰。

koa源码阅读[0]

2018-07-23
阅读 7 分钟
3.2k
Node.js也是写了两三年的时间了,刚开始学习Node的时候,hello world就是创建一个HttpServer,后来在工作中也是经历过Express、Koa1.x、Koa2.x以及最近还在研究的结合着TypeScript的routing-controllers(驱动依然是Express与Koa)。 用的比较多的还是Koa版本,也是对它的洋葱模型比较感兴趣,所以最近抽出时间来阅读其...

TypeScript在node项目中的实践

2018-07-22
阅读 7 分钟
8.9k
TypeScript可以理解为是JavaScript的一个超集,也就是说涵盖了所有JavaScript的功能,并在之上有着自己独特的语法。 最近的一个新项目开始了TS的踩坑之旅,现分享一些可以借鉴的套路给大家。

Javascript装饰器的妙用

2018-07-09
阅读 15 分钟
18.3k
最近新开了一个Node项目,采用TypeScript来开发,在数据库及路由管理方面用了不少的装饰器,发觉这的确是一个好东西。 装饰器是一个还处于草案中的特性,目前木有直接支持该语法的环境,但是可以通过 babel 之类的进行转换为旧语法来实现效果,所以在TypeScript中,可以放心的使用@Decorator。

纯原生组件化-模块化的探索

2018-07-01
阅读 15 分钟
6.9k
纯原生的组件化、模块化的一次小小的尝试,用到了如下几个新特性:shadown-DOM 对HTML标签结构的一个封装,真正意义上的组件,能保证 shadow-DOM 中的DOM元素不会被外界影响,内部也不会影响到外部的行为,变成了一个独立的模块。 custom-elements 可以在浏览器中注册自定义的标签来使用,类似这样的效果<my-tag>&...

Web开发生存工具使用指南

2018-06-24
阅读 7 分钟
10.6k
这里安利两款我认为开发中能够极大的提高生产力的工具,Charles 和 Postman。 P.S. Charles(查尔斯)。。不要再读查理斯了,金刚狼中被老铁扎心的博士就叫 Charles P.P.S. 多图慎点 两者的作用 首先,这两个工具重叠的功能并不多,两者一起使用效果绝对是1 + 1 > 2。 Postman Postman 主要是用于模拟 http 请求,可以...

原生ES-Module在浏览器中的尝试

2018-06-10
阅读 5 分钟
8.9k
其实浏览器原生模块相关的支持也已经出了一两年了(我第一次知道这个事情实在2016年下半年的时候) 可以抛开webpack直接使用import之类的语法 但因为算是一个比较新的东西,所以现在基本只能自己闹着玩 :p 但这并不能成为不去了解它的借口,还是要体验一下的。