上面只是简单的介绍了下,想要了解更多实用功能的,可以去官网查看;5. semversemver 是一个语义化版本号管理的 npm 库;semver 在 vue3 框架源码和 vite 工具源码中都有使用;
最后:这个库属实是好用,良心推荐!
说直白一点,你在开发一个开源库的时候,肯定会遇到要提醒用户不同版本号不同的情况,那么如何去判断用户版本过低,semver 就可以很好的帮助你解决这个问题;
semver 内置了许多方法,比如判断一个版本是否合法,判断版本号命名是否正确,两个版本谁大谁小之类等等方法;
如下列一些官网的例子:
const semver = require('semver')semver.valid('1.2.3') // '1.2.3'semver.valid('a.b.c') // nullsemver.clean('=v1.2.3') // '1.2.3'semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // truesemver.gt('1.2.3', '9.8.7') // falsesemver.lt('1.2.3', '9.8.7') // truesemver.minVersion('>=1.0.0') // '1.0.0'semver.valid(semver.coerce('v2')) // '2.0.0'semver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7'复制代码6. minimistminimist 是一个命令行参数解析工具;minimist 在 vue3 框架源码和 vite 工具源码中都有使用;使用:
const args = require('minimist')(process.argv.slice(2))复制代码例如:# 执行以下命令vite create App -x 3 -y 4 -n5 -abc --beep=boop foo bar baz# 将获得{ _: [ 'foo', 'bar', 'baz' ],x: 3,y: 4,n: 5,a: true,b: true,c: true,beep: 'boop' }复制代码特别要说明的是返回值其中首个 key 是_,它的值是个数组,包含的是所有没有关联选项的参数 。如果你的工具在终端有较多的参数,那么这个工具就非常的适合您!7. magic-stringmagic-string 是一个用于操作字符串和生成源映射的小而快的库;
其实它最主要的功能就是对一些源代码和庞大的 AST 字符串做轻量级字符串的替换;
在 vite 工具源码和 @vue/compiler-sfc 中大量使用;
使用:
import MagicString from 'magic-string';const s = new MagicString('problems = 99');// 替换 problems -> answers.overwrite(0, 8, 'answer')s.toString() // 'answer = 99'// 生成 sourcemapvar map = s.generateMap({source: 'source.js',file: 'converted.js.map',includeContent: true})复制代码8. fs-extrafs-extra 是一个强大的文件操作库,是 Nodejs fs 模块 的增强版;这个就不多讲了,因为它在千锤百炼之下只能形容它是 YYDS,查看 更多官方文档 。
9. chokidarchokidar 是一款专门用于文件监控的库;chokidar 只在 vite 工具源码中有使用;
其实 Node.js 标准库中提供 fs.watch 和 fs.watchFile 两个方法用于处理文件监控,但是为什么我们还需要chokidar 呢?
主要是由于 兼容性不好、无法监听、监听多次 等大量影响性能的问题;
chokidar 用法:
const chokidar = require('chokidar');const watcher = chokidar.watch('file, dir, glob, or array', {ignored: /(^|[/\])../,persistent: true});watcher.on('add', path => console.log(`File ${path} has been added`)).on('change', path => console.log(`File ${path} has been changed`)).on('unlink', path => console.log(`File ${path} has been removed`)).on('addDir', path => console.log(`Directory ${path} has been added`)).on('unlinkDir', path => console.log(`Directory ${path} has been removed`)).on('error', error => console.log(`Watcher error: ${error}`)).on('ready', () => console.log('Initial scan complete. Ready for changes')).on('all', (event, path) => console.log(event,path)).on('raw', (event, path, details) => {log('Raw event info:', event, path, details);});复制代码10. fast-globfast-glob 是一个快速批量导入、读取文件的库; fast-glob 只在 vite 工具源码中有使用;基本语法:
- * :匹配除斜杆、影藏文件外的所有文件内容;
- **:匹配零个或多个层级的目录;
- ?:匹配除斜杆以外的任何单个字符;
- [seq]:匹配 [] 中的任意字符 seq;
const fg = require('fast-glob');const entries = await fg(['.editorconfig', '**/index.js'], { dot: true });复制代码在 vite 中使用:vite 工具中 import.meta.glob 方法(如下)就是基于这个库来实现,所以如果你在自己的工具库中有批量文件等的操作,这个库是以很不错的选择;
推荐阅读
- 平板买什么好(500元内的最好平板)
- 天润酸奶为什么这么火(喝酸奶泻火吗)
- 鲱鱼罐头为什么这么臭(鲱鱼罐头好吃吗)
- 股票市盈率是什么意思(股票发行市盈率是什么意思)
- 琦玉老师为什么这么强(琦玉老师的最强形态是什么形态)
- 为什么选择这份工作(去单位面试自我介绍怎么说)
- 喝茶用什么杯子好(泡茶用什么材质的杯子好)
- 如何快速学会电脑盲打 如何练习盲打
- 2023 年 Web 框架性能报告
- 你好李焕英为什么删减(李焕英简介)
