每天看 10 个 NPM 模块?
最近看到阿里前端技术专家狼叔在 17 年的这篇《迷茫时学习 Node.js 最好的方法》[1]提到:
今天小弟过来找我,说迷茫,我告诉他一个密法:一天看 10 个 npm 模块,坚持一年就是 3000+,按正常工作需要,超过 200 个都很厉害了。
第一次看到的时候感觉有点鸡汤,但静下心来仔细想想却不无道理。以 Vite 来举例子,我在看它代码的时候,印象很深的一个点就是各种开源模块信手拈来,恰到好处的解决了需求,这种能力是一定需要大量的开源模块阅读量的。
Vite magic-string
比如 Vite 中大量运用 magic-string[2] 这个库做一些字符串的魔术替换,这个库的目的就是在一些轻量级替换源代码的场景中替代 AST 这种过于庞大的解决方案。
var MagicString = require('magic-string')
var s = new MagicString('problems = 99')// 替换 problems -> answer
s.overwrite(0, 8, 'answer')
s.toString() // 'answer = 99'// 生成 sourcemap
var map = s.generateMap({source: 'source.js',file: 'converted.js.map',includeContent: true
})
Vite fast-glob
再比如用 fast-glob[3] 去实现 Vite 中好用的 Glob Import[4] 批量导入语法
好,现在我们知道有 fast-glob
这么好用的库了,顺带读一读文档看看它的用法,那么之后我们在自己的工作中,写诸如脚手架的工具时,就可以用这个库对外提供一些好用的批量导入 API,这就成为了我们自己知识体系中的一部分。
Vite SSG
我最近一直比较关注的小哥 Anthony Fu[5],最近刚参加完 2021 年的 VueConf 大会,带来了对日常开发非常实用的一场演讲。
他最近在开源方面非常活跃,很大一部分精力投入在 Vite 相关的生态建设中,他开发的 vite-ssg[6] 插件支持把 Vite 项目构建为静态网站。
SSG,全称是 Static-Site-Generators,静态站点生成器。在构建时就把你的 Web 应用构建为 HTML 格式,对 SEO 和性能都有非常显著的帮助。
他当然不是从零完成这么庞大的工作量,@vue/server-renderer
这个包本身是为 Vue 构建 SSR 应用而生的,他巧妙利用这个库把 Vue 组件渲染为 HTML 字符串的能力,节省了非常多的工作量。
在他的博客中也有提到:
The idea here is fairly simple: bundle the app entry, then for each route, dump the app using APIs from the
@vue/server-renderer
package. Simplified code here:
import { renderToString } from '@vue/server-renderer'const createApp = required('dist-ssr/app.js')await Promise.all(routes.map(async (route) => {const { app, router, head } = createApp(false)router.push(route)await router.isReady()const appHTML = await renderToString(app)const renderedHTML = renderHTML(indexHTML, appHTML)await fs.writeFile(`${route}.html`, renderedHTML, 'utf-8')})
)
简化后的思路就是,在 SSR 的环境下启动应用后,对每个路由用 @vue/server-renderer
生成静态的 HTML 字符串,写入为 HTML 文件。
虽然代码看似简短,但这背后体现的是对 Vue3 生态的熟悉,更具体的说就是对 Vue3 发布的每个 npm 包所具有的能力的熟悉。
只是 npm 库吗?
当然不是,比如最近我们工作中的项目接入了微软开源的 Rush[7],Rush 是为 Monorepo 工程设计的一体化解决方案。
在我阅读文档的过程中,我就学习到了很多包管理方面的知识:
NPM vs PNPM vs Yarn[8]
幽灵依赖(Phantom Dependencies)[9]
NPM 分身(NPM doppelgangers)[10]
在阅读 Vue.js 文档的时候,风格指南[11] 部分也给我留下了很深的印象,开源作者大佬在多年代码生涯总结而成的实践指南,一定是有非常多的精华。比如:
组件名称应该以高阶的 (通常是一般化描述的) 单词开头,以描述性的修饰词结尾。
当你在现实中的维护场景下,假设你在想:“我要给搜索按钮(SearchButton)的清除(Clear)功能换个图标”。
那么你在视线扫过这个文件夹的时候,关注点自然先集中到 SearchButton
这个部分,再去寻找后缀的 Clear
、Run
描述性修饰词,点进 Clear
组件进行维护。这样组件关系就非常一目了然。
这些开源作者的心血经常在文档中不起眼的部分静静等候你去发现。
工作太忙?
其实很多人第一反应可能是:“一天看 10 个,我工作都那么忙了,哪有空啊?”
关于这点,狼叔也在原文中提到了:
这里的 10 个其实只是个虚数,看个人能力和决心,量力而行即可。
但请一定要能做到每日精进。
Node.js 模块在 npm 上的统计数据表明,截止到今天 2017 年 9 月 24 日,共有 55.9 万个模块。单日下载在 1.5 亿次。这么大规模的模块,每天学几个,水平一定会增长的非常快的。
最难的不是下决心,而是坚持!这是最值得自豪的称赞,没有之一!
比如 VueConf 大会里提到了某些新的技术,比如你的同事在聊天的时候提到了一些让你感兴趣的库,你都可以去搜索看看,或许在将来工作中的某天就会不经意的帮助到你。
总结
不积硅步,无以至千里。保持好奇心、热情和耐心,不要对任何东西都不求甚解,当然也不要对某些地方太钻牛角尖。
“每天 10 个 NPM 模块” 更像是一种激励,可能中间我们会断掉两三天,甚至几周都提不起精神,但只要在心里保持这个信念,期待一年、三年、五年以后不一样的我们。
本文转载自:前端从进阶到入院
参考资料
[1]
《迷茫时学习 Node.js 最好的方法》: https://zhuanlan.zhihu.com/p/29625882
[2]
magic-string: https://www.npmjs.com/package/magic-string
[3]
fast-glob: https://www.npmjs.com/package/fast-glob
[4]
Glob Import: https://vitejs.dev/guide/features.html#glob-import
[5]
Anthony Fu: https://antfu.me/
[6]
vite-ssg: https://github.com/antfu/vite-ssg
[7]
Rush: https://rushjs.io/pages/intro/welcome/
[8]
NPM vs PNPM vs Yarn: https://rushjs.io/pages/maintainer/package_managers/
[9]
幽灵依赖(Phantom Dependencies): https://rushjs.io/pages/advanced/phantom_deps/
[10]
NPM 分身(NPM doppelgangers): https://rushjs.io/pages/advanced/npm_doppelgangers/
[11]
风格指南: https://v3.cn.vuejs.org/style-guide/
推荐链接
10张脑图带你快速入门Vue3 | 附高清原图
前端程序员简历模板整理和下载
小抄学习法: 4张图掌握JS核心要点
顺手点赞、在看
,让我有动力继续更新学习方法呀
每天看 10 个 NPM 模块?相关推荐
- 每天阅读一个 npm 模块(4)- throttle-debounce
系列文章: 每天阅读一个 npm 模块(1)- username 每天阅读一个 npm 模块(2)- mem 每天阅读一个 npm 模块(3)- mimic-fn 上一篇文章中介绍的属性描述符的知识太 ...
- nodejs安装及npm模块插件安装路径配置
在学习完js后,我们就要进入nodejs的学习,因此就必须配置nodejs和npm的属性了. 我相信,个别人在安装时会遇到这样那样的问题,看着同学都已装好,难免会焦虑起来.于是就开始上网查找解决方案, ...
- 如何在Node JS中卸载NPM模块?
本文翻译自:How to uninstall npm modules in node js? As commonly known, any npm module can be installed by ...
- npm 引用子项目模块_Java / Web项目中的NPM模块Browser-Sync
npm 引用子项目模块 Browser-Sync是一个方便的基于Node.js的NPM模块,可用于更快的Web开发. 浏览器同步可在许多设备之间同步文件更改和交互. 最重要的功能是实时重新加载. 我们 ...
- Java / Web项目中的NPM模块Browser-Sync
Browser-Sync是一个方便的基于Node.js的NPM模块,可用于更快的Web开发. 浏览器同步可在许多设备之间同步文件更改和交互. 最重要的功能是实时重新加载. 我们也可以在Java / W ...
- 提升你的开发效率,10 个 NPM 使用技巧
对于一个项目,常用的一些npm简单命令包含的功能有:初始化一个文件夹( npm init ),下载npm模块( npm install ),创建测试( npm test ) 和自定义脚本( npm r ...
- 10个 NPM 使用技巧
对于一个项目,常用的一些npm简单命令包含的功能有:初始化一个文件夹( npm init ),下载npm模块( npm install ),创建测试( npm tese ) 和自定义脚本( npm r ...
- Python爬虫,爬取快看漫画每日更新模块
文章目录 前言 一.爬虫是什么? 二.使用步骤 1.引入库 2.文件夹准备 3.将列表存储为txt格式文件 4.爬取每日更新页面具体代码: 5.运行结果 总结 前言 根据基本的爬虫知识,爬取快看漫画每 ...
- [译] 在 Google Apps 脚本中使用 ES6 和 npm 模块
原文地址:Using ES6 and npm modules in Google Apps Script 原文作者:Prasanth Janardanan 译文出自:掘金翻译计划 本文永久链接:git ...
最新文章
- HDU 4946 Area of Mushroom 凸包
- java 显示日历_JAVA显示日历(已知年和该年第一天为星期几)
- linux c/c++
- Python 内部:可调用对象是如何工作的
- ES6新特性之字符串扩展
- windowbuilder点击按钮出现新界面_掌握这几招,轻松设计出高点击率的行为召唤按钮...
- Facebook应用Moments使用C++实现跨平台代码共享
- DetNAS:首个搜索物体检测Backbone的方法 | NeurIPS 2019
- 五眼网络安全机构联合发布事件响应指南
- python资源分配算法_DRL based Resource Allocation Framework
- Python各类图像库的图片读写方式总结
- Meta Learning | 加了元学习之后,少样本学习竟然可以变得这么简单!
- 【每日算法Day 67】经典面试题:手动开根号,你知道几种方法?
- linux perl 执行java,如何从Java调用Perl?
- 运营Tumblr的几个建议-教你成为tumblr达人
- 深耕智慧互联网,华数传媒正重新定义生活方式
- stm32呼吸灯实验
- bedtools intersect用法详解
- 计算机社团基础,计算机社团招新策划
- jenkins api java封装_Jenkins api java 调用
热门文章
- “网络白痴”初学SEO成长经验心得
- linux 脚本编写基本命令,Linux Shell命令行及脚本编程实例详解
- 在天猫618被外国人疯抢的国货,名字都有一个共同规律
- AirSim动态 | 安装配置AirSim环境(一)
- 北方民族大学计算机科学与技术硕士,2014年北方民族大学计算机科学与技术考研调剂信息(第二批)...
- 广东石油化工学院计算机基础,广东石油化工学院计算机基础答案
- opencv简单方式红绿灯状态识别
- 运营一款电视盒子需要注意什么?
- 发那科服务器显示1,发那科31i系统401报警处理一例
- 设备加密狗、软加密狗