跳到主要内容

npm前端包

· 阅读需 26 分钟
Fall Zhang
Coding For fun

Create by fall on 02 Mar 2023 Recently revised in 11 Feb 2025

所有的包名称就是 npm 中的包名称,可以直接在 npm 官网进行搜索

系统工具

包名称英文介绍介绍
node-cronThis module allows you to schedule task in node.js using full crontab syntax.计划执行一些内容
cronerTrigger functions or evaluate cron expressions in JavaScript or TypeScript.定时执行任务,并提供即将到来的事件
cronstruecron 表达式转换更可读

git 工具

包名称英文介绍介绍
husky提供 git 相关的 hooks 方法
lint-stagedRun linters against staged git files在 git 缓存区强制执行 lint

命令行相关

包名称英文介绍介绍
concurrentlyRun multiple commands concurrently.实时运行多个命令
start-server-and-testStarts server, waits for URL, then runs test command; when the tests end, shuts down server
live-server提供 npx live-server index.html
http-servernpx http-server [path] [options]
inquirerA collection of common interactive command line user interfaces.通用终端 UI 输入接口
ora优雅的终端加载动画
node-jq命令行 JSON 处理工具
enquirer命令行选择功能工具
node-gypcompiling native addon modules for Node.js.
np更好用的 npm publish
release-itAutomate versioning and package publishing自动打包和发布更新
chalk命令行内容着色
voici.js终端表格打印
fxfx data.jsonJSON 命令行处理工具
gradient-stringBeautiful color gradients in terminal output为命令行加上渐变

操作系统

包名称介绍英文介绍
wallpaper获取或者设置桌面壁纸Get or set the desktop wallpaper
diskusage跨平台磁盘使用统计
node-osc用于在媒体设备之间进行通信的协议

工程化

包名称英文介绍介绍
npm-check-updates-i 交互模式,查看潜在的升级并逐个选择
knipfinds unused files, dependencies and exports in your projects查看 TS 项目中没有用到的文件和依赖
dependency-cruiser将应用的依赖可视化

打包

包名称英文介绍介绍
rspack基于 Rust 的打包工具
rolldown重写 rollup,更快更强

格式化 lint

包名称英文介绍介绍
quick-lint-jsfinds bugs in JavaScript programs.快速分析 js 中的语法错误,C++
sugarssIndent-based CSS syntax for PostCSS.强缩进 CSS 语法检测
@biomejs/biomefast formatter for JavaScript, TypeScript, JSX, and JSONrust 重写的格式化工具,快!

测试

包名称英文介绍介绍
jestUser-friendly glob matching.Based on fast-glob筛选文件目录
autocannonHTTP/1.1 基准测试工具
vitest基于 vite 的测试,开箱可用 import 语法
jsdom纯 JS 实现的 DOM
fetch-mock请求 mock

语法转换

包名称官方介绍介绍
sucraseSucrase is about 20x faster than Babelbabel 的替代品,允许更快地构建
unpluginUnified plugin system for build tools.制作所有打包平台都可以使用的插件
swcsuper-fast TypeScript / JavaScript compiler written in Rust.超快的 ts / js 编译器

通用工具

这些工具是不依赖于 DOM,前后端通用的 package

包名称英文介绍介绍
ohashSuper fast hashing library written in Vanilla JS原生书写的快速哈希库,判断对象内容是否相等
imask文字校验功能
validatorA library of string validators and sanitizers.字符串校验库
zodschema validation字符串等数据的校验工具
destr实现同 JSON.parse 的功能但更安全,支持 ts
file-type使用二进制判断文件的类型
rxjsReactive Extensions For JavaScriptJS 的响应式扩展
chardet文件,字符使用的编码方式检测库
brotli-wasm基于 Brotli 算法的压缩和解压缩工具
filesize把文件大小换算为易读的内容
math.js处理复数、分数、单位、矩阵、符号计算等
@faker-js/fakerGenerate massive amounts of fake data生成大量假数据
ip-address解析和操作 IPv4/6 地址
lossless-json避免数据过大影响 json 解析
china-division中国行政区划(五级)
emoji-regexoffers a regular expression to match all emoji symbols and sequences正则匹配所有的 emoji
culori根据颜色获取颜色名称
color-names根据颜色获取颜色名称(或者反向)
zip-stream
@zip.js/zip.js
fast-csv对 csv 文件进行快速处理
web-worker浏览器和 node 一致的 worker
alfaazthe fastest multilingual word counter号称最快的字数统计工具
workerpool将任务分配给工作池
pretty-ms将 ms 转换为好看的形式
chroma-jszero-dependency color conversions无依赖的颜色转换工具
immer不可变数据处理
mutativeefficient immutable不可变数据,效率更高
js-yaml解析 yaml 文件
tinybasereactive data store for local-first apps.本地响应式数据库
microdiffobject and array differ查看 array 和 object 的不同
madge给出指定文件的依赖关系
browser-or-node判断当前的环境,
merge-anything合并,但是是递归合并
ejs模板引擎
bwip-js条形码生成工具
superstruct数据格式验证工具(运行时
es-toolkit正实现着 Lodash 所有功能,类型支持,性能 up
@diffusionstudio/vits-web本地语音生成工具,阅读
calendar-linkCalendar link generator for popular services在各个流行平台上生成日历事件
tesseract.js基于 js 的 OCR 识别
humanifyjs代码反混淆
colorthiefGrab the color palette from an image从图像中获取主要的颜色
match-sorter确定性最佳匹配数组排序
tinybenchBenchmark your code easily
immutable不可变数据,支持 map
fraction.js数学更精确的计算

时间处理

包名称英文介绍介绍
timeago.jsformat datetime with *** time ago返回 XX 时间之前
luxonworking with dates and times in JavaScript.时间日期处理
date-fns提供超多关于日期的处理函数
chrono-nodeA natural language date parser in Javascript.自然语言日期处理器
dayjs极小的事件处理工具
@formkit/tempoas small and easy to use as possible.小巧好用的时间工具(有TS类型支持)

node

更倾向于服务端(node)使用的内容

包名称英文介绍介绍
undici请求库
graphqla query languageMeta 用的查询语言(一个接口请求前端想要的数据)
staticrypt轻松加密静态站点
migrate一个抽象迁移框架
ws使用 websocket
pm2·后端资源监听
piscina线程池控制工具
nodemon监听文件变动并自动执行
mqttclient library for the MQTT protocol支持 mqtt 协议
pureimage100% JavaScript implementation of theCanvas 2D drawing API for NodeJS纯 node 实现 2d canvas 绘制
tinypool轻量级/微型 Node.js 工作线程池
necord用于创建 Discord 机器人的框架
globbyUser-friendly glob matching.Based on fast-glob筛选文件目录
passport后端权限验证工具
@humanfs/nodewhat a modern, high-level filesytem API should look like.原生 fs API 应该成为的样子
node-usbNode 的改进 USB 库
phinThe lightweight Node.js HTTP client轻量请求库
node-jqc 的 json 处理工具
node-usb使用 node 操作 usb
wait-onwait for files, ports, sockets, and http(s) resources to become available等待文件等变得可用
piscinafast, efficient Node.js Worker Thread Pool implementation工作线程池库
@vinejs/vineOne of the fastest validation library for Node.js号称最快速的表单验证库

文件处理

包名称英文介绍介绍
node-xlsx使用 node 处理 xlsx 文件
imgly/background-removal移除图像背景
sharphigh speed Node.js module is to convert large images超快速图片处理
jimp无依赖的 Node 图像处理库
node-poppler异步 PDF 渲染器
chokidar更好的 watchFile
exiftool-vendored图片拍摄信息数据访问

数据库

包名称英文介绍介绍
lmdbLMDB 的数据存储包装器。
mongooseMongoose is a MongoDB object modeling tool对象建模工具
lowdbSimple to use local JSON database.简单的 JSON 作为 DB
json-serverGet a full fake REST API with zero coding in less than 30 seconds也是 JSON 作为 DB
node-oracledb纯 JS Oracle 数据库驱动程序
pgsql-ast-parsera Postgres SQL syntax parser.SQL 语法解析器
kanel从 Postgres 生成 TypeScript 类型
knexA batteries-included SQL query & schema builder
mysql2专注于性能的 mysql
prismaPrisma is a next-generation ORM下一代关系对象映射(自己说的)
mikro-ormTypeScript ORM for Node.js based on Data Mapper
slonikPostgreSQL client
node-pg-migratedatabase migration management built exclusively for postgres.数据库迁移工具

爬虫

包名称英文介绍介绍
node-html-to-image将 HTML 转换为 img
crawlee网络爬虫和浏览器自动化库
gotNode HTTP 请求库
puppeteer自动化浏览器操作
linkinatornpx linkinator https://example.com/查看网站是否有效

浏览器

更倾向于在前端使用(或者是依赖于 DOM 等浏览器提供的对象),这些包默认是不依赖框架,或者在多个框架中都可以使用的

包名称英文介绍介绍
frappe-ganttA simple, interactive, modern gantt chart library for the web甘特图,日期计划表,时间线
gantt-schedule-timeline-calendarGantt, schedule, timeline and calendar components all in one!计划表,甘特图,时间线
@schedule-x/calendar日历对工作进行管理
@fullcalendar/core日历组件
js-confetti、canvas-confetti添加一个彩带动画
satoriSatori only accepts JSX elementsdom 转化为 svg
highlight.js语法高亮
prismjs语法高亮
shikiA beautiful yet powerful syntax highlighter异步语法高亮,漂亮的代码查看器
sugar-high极小的 jsx 语法高亮
htmlparser2快速解析HTML
gridstack类似于 vue-grid-layout
melonjs成熟的 HTML5 游戏引擎。
eslint-plugin-check-file强制检查文件名称
@algolia/autocomplete-js自动完成组件
qrcode生成二维码
selectoallows select elements in the drag area using the mouse or touch.区域选择组件
@formkit/auto-animate简单的方式添加动画(支持各种框架)
@tiptap/coreBuild collaborative editor apps多人协作的编辑器
mathlive数学公式的编辑和展示
copy-text-to-clipboard将内容粘贴到剪切板(2k)
wavesurfer音频文件的波形查看器
fast-png使用原生 JavaScript 事件解码编码 PNG 图片
svguitar演示:https://github.com/omnibrain/svguitar用 SVG 做吉他谱!
axios-token-manager
axios-mock-adapterAxios adapter that allows to easily mock requestsaxios mock 适配器
@popperjs/corepopover 组件
@floating-ui/dompopover 组件
driver.js第一次进入页面的提示组件
moveable移动缩放旋转等操作
sortablejsSortable is a JavaScript library for reorderable drag-and-drop lists.列表拖拽库
capture-website获取网站截屏
reveal滚动和动画结合起来,构建展示页面
emoji-marta customizable emoji picker自定义 emoji 选择器
ai2html将 Adobe Illustrator 文件转换成 HTML
screenfull用于全屏和取消全屏展示
@tsparticles/enginehttps://particles.js.org/特效引擎
matter-jsJavaScript 2D rigid body physics engine for the web刚体物理引擎
signature_pada JavaScript library for drawing smooth signatures.写字板的签名组件
@algolia/autocomplete-js优化搜索自动提示体验
@bitjson/qr-code二维码生成
embla-carousel(非包名轮播功能(支持主流框架
jsbarcode条形码生成器
perfect-freehand让手绘内容更加优雅
atrament另一个手绘包
tanstack 非包名一系列的 UI 组件
dexieindexDB 封装
tonal音乐理论包
cally无框架无依赖原生日历
facesjs生成卡通脸部(不怎么好看
katexfast TeX math rendering快速渲染的数学符号库
simple-parallax-js视差效果
fabricsvg 和 canvas 互相转换的库
@egjs/infinitegrid多框架支持的无限滚动
html2pdf.jshtml 转为 pdf
ag-grid-community高性能数据 grid(表格)
@glidejs/glide一个滑动块(走马灯效果)
spoiled文字掩盖效果
music-metadata获取音乐原信息
click-to-component点击进入组件的源码编辑

React

包名称英文介绍介绍
react-qrcode-logogenerate a customizable QR Code.生成带 Logo 的 qrcode
react-spinners加载动画
react-springa cross-platform spring-physics first animation library.动画库
react-chronoRender timelines in three different modes时间线组件
plyr-react自定义多媒体播放器组件
@tremor/reactThe react library to build dashboards fast快速快速构建后台
next-sitemapNext.js 应用程序的网站地图生成器
react-wrap-balancer减少内容变换的换行频率次数
react-virtuoso虚拟滚动
boring-avatarsgenerates custom, SVG-based avatars from any username and color palette.根据名称随机生成头像
react-webcam摄像头相关
react-iconsInclude popular icons in your React projectsIcon,但是 React
html-react-parserHTML 字符串解析为 React 代码的解析器
spectacle基于 React 和 JSX 的演示文库
react-virtualized强大的虚拟列表组件
react-grid-layoutRGL is React-only自定义布局的组件
react-tracking用户行为采集框架
@codesandbox/sandpack-react前端沙盒
react-quick-pinch-zoomDOM 放大和拖动,多点控制形状
react-datasheet-grid表格大数据渲染
react-scroll-sync同步滚动内容
react-to-print打印相关功能
react-scroll-parallax滚动动画
react-aria-components40 多个可自定义、支持无障碍访问的组件
shadcn/ui(不是 npm 包名shadcn/ui https://ui.shadcn.com/把 UI 组件生成到你的项目内,高可扩展
react-resize-detectormanaging element size changes in React利用 ResizeObserver 实现
react-use提供 react 的 hooks
jotaisimple useState replacement小型状态管理
zustand状态管理
react-tag-autocomplete自动完成 tag 功能
@million/lint类似 eslint,但给的是性能优化建议
react-geigerhttps://github.com/kristiandupont/react-geiger让 React 应用卡顿时发出声音
onborda产品导览功能(next
spectacle在线预览组件
astroAstro is the all-in-one web framework designed for speed.访问速度优先 md 生成 SSR 框架
reassurePerformance testing companion for React and React Native.react 和 RN 的性能测试工具
pixelmatch像素级别对比图像差异
react-acereact 的一个代码编辑器
valtio为 react 设计状态管理
@tanstack/react-query获取
@codaworks/react-glow高亮追踪功能
react-burger-menu侧边可收起展开菜单样式

UI / 组件

包名称英文介绍介绍
react-content-loader骨架内容组件屏
react-pro-sidebarsidebar 组件库
sonnerSonner is an opinionated toast component for React.一个轻提示的组件
react-day-pickerDayPicker is a date picker component for React.日期选择(a11y)
@dnd-kit/coreBeautiful and accessible drag and drop for lists with ReactReact 可拖拽组件库
react-currency-input-field金额输入框
react-archer在 DOM 之间创建箭头
react-clockReact 时钟
react-barcode条形码
react-phone-number-input国际电话输入
react-awesome-reveal元素可见时触发动画
react-international-phone电话号码输入组件
hamburger-react菜单转换动画
react-force-graphforce-graph 的 react 版本
@codaworks/react-glow追踪高亮的功能
react-big-calendar大型日历的组件
react-signature-pad-wrapper对 signature-pad 的 react 包装
react-datepickerA simple and reusable Datepicker component for React简单的日期选择组件
vaul一个简单的抽屉组件
@uiw/react-codemirrorcodemirror react
simple-keyboard虚拟键盘
react-loading-skeletonreact 加载骨架
react-snap-carousel轮播滚动屏,自适应
react-paginate自定义页脚,用于翻页功能
reechartsd3 react 构建可视化库
@chakra-ui/system
@viselect/react可以通过框选选中多个 DOM

文件相关

包名称英文介绍介绍
yet-another-react-lightbox支持视频和滑动的媒体图片预览组件
react-pdf在 React 应用中显示 PDF。
react-medium-image-zoom图片缩放工具
react-image-crop图片裁剪工具
@onedoc/react-print将 react 生成为 PDF

Vue

包名称英文介绍介绍
vue-cropper一个优雅的图片裁剪插件
vuetifythe world's most popular Vue.js framework for building feature rich, blazing fast applications.Vue 组件库
vue-grid-layout可以拖拽 DOM 的大小
sandpack-vue3vue 沙盒
@formkit/core
shadcn-vueA CLI for adding components to your project.复制组件到你自己的应用程序中。
vue-qr提供 二维码生成
vue-virtual-scrollervue 虚拟滚动的
@inkline/inkline一个可定制的 Vue.js 3 UI/UX 库
radix-vueUI component library for building high-quality, accessible design systems and web appsa11y 高质量 UI 框架
@tinymce/tinymce-vueThe world's #1 open source rich text editor.富文本编辑器

编辑器

组件名称英文介绍介绍
codemirror代码编辑器
slate富文本编辑器
prosemirror文本编辑器
@ckeditor/ckeditor5-core编辑器
lexical可扩展编辑器
monacoVS Code 的编辑器
trixRich Text Editor富文本编辑器
quill所见即所得的编辑器
micromarkCommonMark 最小的实现

markdown

组件名称英文介绍介绍框架
remark解析 MD,输出序列化内容
markdown-itMarkdown parser done right. Fast and easy to extend.
markedMarkdown 解析器和编译器
remark-mdxremark plugin to support the MDX syntax支持 MDX 高亮
@mdx-js/mdx
@penrose/core更多数学相关图形的支持
mermaiddefinitions and a renderer to create and modify complex diagrams.为 markdown 添加更多支持
@milkdown/core编辑 markdown 所见即所得
turndown将 html 转换为 markdown
markdown-to-jsx将 markdown 转换为 jsxreact
@blocknote/core开源多人协作文档
@mdxeditor/editor更轻量的 markdown 编辑器
codehikebridges the gap between Markdown and React把 markdown 转为 react

文件查看

组件名称文档类型介绍
docx-previewdoc/docx前端 docx 文件预览组件
mammothdoc/docx前端 word 编辑文件,可导出为 html
docxdoc/docx简单生成和修改 docx 文件
xlsxxlsx提供 xlsx 数据处理(官方切换了 git 和安装的地址,详见连接
exceljsxlsx操作和书写数据,并且转化为 xlsx 和 JSON
handsontablexlsx数据绑定,数据分析,筛选,排序,和操作
pptxgenjspptx创建 js ppt
@webtoon/psdpsd无依赖的 .psd 文件解析器
@pdfslick/corepdf基于 PDF.js 的 pdf 文件查看器

CSS

组件名称文档类型介绍
css-doodleA web component for drawing patterns with CSS.使用 CSS 画图案
@medv/finderCSS Selector Generator生成 DOM 最短的 selector(选择器)

可视化

组件名称文档类型介绍框架
plotly.jsa standalone Javascript data visualization library独立的可视化库
plotteus时间叙事的可视化库(滚动、UI 控件)
reagraph基于 WebGL 的 React 图形可视化库(600 starsReact
@visx/visx基于 D3 的 React 可视化React
@xyflow/react 或 reactflowbuilding node-based UIs with React or Svelte.流程图,MITReact
@excalidraw/excalidrawvirtual hand-drawn style whiteboard.超级画布react
@glideapps/glide-data-gridhttps://grid.glideapps.com/表格 + 可视化
spacekit.js宇宙 3D 视图
vizzuhttps://lib.vizzuhq.com/latest/新的动画可视化库
cytoscapelibrary for visualisation and analysis关系图,各个内容间的联系
peaks.jsdisplay and interact with audio waveforms音频文件的波形查看器和操作
bpmn-js标准的 BPMN 图
chart.jsSimple yet flexible JavaScript charting for designers & developers简单灵活的 chart
apexchartsbuild interactive data visualizations with simple API编写互动数据

跨端

React Native

包名称英文介绍介绍
react-native-permissionsRN 的统一权限 API
react-native-picker-select选择功能
react-native-svg提供一个兼容层来适配 React。
react-native-shareRN 分享功能
tamaguiStyle and UI for React(web and native)
@shopify/react-native-skiaHigh-performance 2d Graphics for React Native using Skia绘制 2D 图像库
react-native-image-pickerselect a photo/video from the device library or camera.从设备上选择图片文件
@expensify/react-native-live-markdown跨平台 Markdown 编辑器
react-native-bootsplash启动页面
react-native-vision-camerapowerful, high-performance Camera library相机库
react-native-circular-progress动画进度
react-native-background-actions运行后台任务的后台服务库
react-native-filamentRN 3d 渲染引擎
react-native-compressor上传前压缩

tauri

包名称英文介绍介绍

electron

包名称英文介绍介绍

2分钟环境搭建

· 阅读需 7 分钟
Fall Zhang
Coding For fun

环境配置

使用 Chocolatey 进行快速安装,以及一些 PowerShell、VS code 、npm 的配置

Chocolatey

快速安装软件,同类命令行应用有:Scoop 、winget

当然不是普通的环境搭建方式,而是敲(或者是复制粘贴)三五行代码就可以搞定的那种安装。

社区中有两种快速安装环境的工具 Scoop & Chocolatey,这节课,我们学习使用 Chocolatey。

WinGet 作为微软官方出品还需观望,也不知道微软这次靠不靠谱。

choco 安装

powershell(右键开始菜单,选中 Windows PowerShell 管理员)执行下面程序进行安装

Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

注:必需要管理员权限才能进行安装。否则报一大堆错

软件使用

例如,安装 node.js、nvm

choco install nodejs 
choco install nvm

一行代码搞定前端全家桶!

# windows 系统
# 不建议直接安装 node,而是通过 nvm 安装 node
choco install -y googlechrome firefox git vscode nvm.portable sourcetree

注:安装的 firefox 是国际版的,不是国内版,两个版本之间无法共享账户数据

不仅仅是前端全家桶

安装 python 全家桶!

choco install -y git tortoisegit vscode python
refreshenv
python -m pip install --upgrade pip
# 中国教育网用户切换镜像
# pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install pipenv

安装 docker

choco install docker-desktop

搜索软件

choco search nodejs

VS code

快捷键

  • ctrl + D:阔选光标所在位置的内容,再次按下阔选相同内容
  • Alt + Shift + F:格式化代码
  • alt + ↑/↓:移动选中的整行内容
  • shift + alt +↑/↓:复制当前选中的行
  • ctrl + enter:创建新的行,并且跳转到下一行
  • ctrl + ~:呼出 vs code 命令行
  • ctrl + /:为所选区域添加注释
  • alt + shift +a:为所选区域添加注释,注意,这个快捷可能微信的截图 alt + a 冲突
  • 选中变量,然后点击 f2,可以重命名所有名称相同的变量,该操作跨文件

插件

  • Chinese(simplified)功能和名字一样,提供中文的操作界面
  • Git Graph,提供图表方式来查看 git 版本历史
  • volar 为 vue 提供代码高亮,代码格式化
  • Material Icon Theme 提供各式各样的图标,用来美化和区分不同类型的文件
  • node-snippets 快速生成 node 代码块
  • ESlint 控制代码规范,对代码进行格式化处理,在配置中可以开启格式化功能

慎用插件

应用名称插件功能
小霸王小霸王游戏机
超级鼓励师加油,你是最棒的,年薪百万就在前方。
韭菜盒子/vscode-stocks看股票走势
电影集看电影,刷剧
daily-anime喜欢二次元,喜欢动漫,番剧的更新。
read-vscode-e/Thief-Book/网易云阅读,可以一边敲代码一边看小说。
vsc-netease-music可以听音乐,好像音乐本身感知不强,意义也不大。
vscode-maxPlus浏览游戏资讯。
vscode-leetcode刷算法。
Zhihu On VScode刷知乎。
fakeupdate模仿各种电脑系统的系统更新。
LeetCode刷算法
NBA real-time score看NBA数据。

默认配置

可以同步到 github 上面

// 注意要在设置中开启保存时格式化代码
{
"workbench.iconTheme": "material-icon-theme",
"editor.fontSize": 14,
"editor.wordWrap": "on",
"editor.linkedEditing":true,
"editor.tabSize": 2,
"editor.detectIndentation": false,
// 滚轮缩放编辑器大小
"editor.mouseWheelZoom": false,
"diffEditor.ignoreTrimWhitespace": false,
"editor.unicodeHighlight.nonBasicASCII": false,
"diffEditor.renderSideBySide": false,
"javascript.updateImportsOnFileMove.enabled": "never",
// 可以生成预览窗口,而不是打开一个文件就是一个独立的窗口
"workbench.editor.enablePreview": true,
"editor.formatOnSave": true,
"[javascript]": {
"editor.defaultFormatter": "dbaeumer.vscode-eslint"
},
"[html]": {
"editor.defaultFormatter": "vscode.html-language-features",
},
"[json]": {
"editor.defaultFormatter": "vscode.json-language-features"
},
"[typescript]": {
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
},
"[jsonc]": {
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
},
"[vue]": {
"editor.defaultFormatter": "Vue.volar"
},
"editor.quickSuggestions": {
"strings": true
},
"search.followSymlinks": false,
"search.maxResults": 200,
"files.autoSave": "onFocusChange",
"emmet.includeLanguages": {
"editor.formatOnType": "true",
"editor.formatOnSave": "true"
},
"git.confirmSync": false,
"editor.fontLigatures": false,
"editor.autoClosingOvertype": "always",
"editor.stickyScroll.enabled": true,
"editor.stickyScroll.maxLineCount": 3,
"css.lint.float": "warning",
"css.lint.duplicateProperties": "error",
"css.lint.important": "warning",
"css.lint.universalSelector": "warning",
"less.lint.universalSelector": "warning",
"scss.lint.duplicateProperties": "warning",
"scss.lint.float": "warning",
"eslint.format.enable": true,
"[scss]": {
"editor.defaultFormatter": "vscode.css-language-features"
},
"window.commandCenter": false,
"extensions.autoUpdate": "onlyEnabledExtensions",
"explorer.compactFolders": false,
}

其它配置

windows 系统

可以在 设置:系统 -> 存储 -> 保存新内容的地方 进行配置

全部切换到需要的磁盘

PowerShell

如果 powershell 不能执行一些命令,需要进行修改执行策略:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

wsl

windows subsystem for linux

linux 的子系统

# 安装 wsl
wsl --install
# 安装 ubuntu
wsl --install -d Ubuntu-22.04
# 安装后,可以通过下面命令查看当前电脑上的 wsl 子系统
wsl -l -v
# 以下命令查看线上拥有的 linux 版本
wsl -l -o

npm

npm -v 用于检测 npm 是否安装成功(安装 node 时会同时安装 npm)

注:因为某些大家知道的原因,可能需要更换为国内的镜像,或者安装 yarn、pnpm,代替 npm。

通过该命令 npm get registry 查看当前使用的镜像。

通过 npm set registry [target-webset] 设置镜像

一些镜像网址

  • https://registry.npmjs.org/(默认镜像网址)
  • https://registry.npmmirror.com/(阿里镜像,原地址为 https://registry.npm.taobao.org

项目创建

初始项目搭建

pnpm create vite my-app-name --template <template-name>

支持的模板:

  • 原生:vanillavanilla-ts
  • Vue:vuevue-ts
  • React:reactreact-tsreact-swcreact-swc-tspreactpreact-ts
  • Lit:litlit-ts
  • Svelte:sveltesvelte-ts

TypeScript声明

· 阅读需 7 分钟
Fall Zhang
Coding For fun

声明空间

声明空间,就是声明类型和声明变量所在的不同空间。类型声明空间是 TypeScript 声明的类型空间,这些空间的变量不能进行赋值。变量声明空间可以进行赋值:

类型声明空间

class Foo{}
type Bus = {}
interface Bar{}
// 这些都可以作为类型注解使用
let foo:Foo
let bus:Bus
let bar:Bar
// 但是 Bar、Bus 不能赋值,因为它们只存在类型声明空间
const bar = Bar // error: cannot find name 'Bar'

变量声明空间

class Foo {}
const someVar = Foo
// class Foo {} Foo 既会被放置到变量声明空间,也会放到类型声明空间
// 所以 class 声明的内容既可以作为类型注解,也可以进行赋值

全局模块

全局模块就是任何文件都可以访问的模块,默认情况下,在一个新的 ts 文件中写代码时,它处于全局命名空间中。

// foo.ts
const foo = 123
// 此时,如果在相同的项目里,创建一个新的文件 bar.ts 系统会允许你使用 foo 内的内容
// bar.ts
const back = foo

想避免暴露在全局作用空间

// foo.ts
export const foo = 123
// 如果想继续使用 foo 就需要进行导入,并且使用其他变量也不会污染全局作用域
// bar.ts
import {foo} from './foo' // 此时还会将该文件定义为一个模块,文件内定义的变量也不会污染全局空间
const back = foo

所以文件内,只要使用了 export 关键字,就会表示该文件是个模块。所以也常使用 export {} 放在首行,表示是一个模块。

环境声明

通过 declare 关键字来告诉 TypeScript 一个其他地方已经存在的代码(内容)。

// main.ts
foo = 1123 // Error

通常会使用 .d.ts 结尾的文件进行声明,一般会使用 global.d.ts 或者 vendor.d.ts

// global.d.ts
declare let foo:any
// main.ts
foo = 1123 // declare 声明了该变量,将不会报错

其他的声明文件也类似于该文件,但是更加详细,所以如果自带 .d.ts 结尾的声明文件,一般不需要自行书写。

在声明文件中,每个根级别的声明必须以 declare 关键字作为前缀, TypeScript 将不会把它编译成任何代码。

开发者需要确保这些声明文件,和声明的内容在编译时存在。

声明文件可以声明各种类型

TS的声明文件

编译器通过声明文件能够显示来自其他包的错误和提示。并且声明文件提供有关库的所有类型信息。

获取一个库的声明文件有两种方式

  • Bundled 包含了自己的声明文件,我们只需安装这个库,就可以立即使用它,看库中是否包含 index.d.ts 文件,有些库会在 package.json 文件的 typingstypes 属性中指定类型文件。
  • Definitely Typed 是一个庞大的声明仓库,为没有声明文件的 JavaScript提供类型定义。这些类型定义通过众包的方式完成,微软和开源者一同管理。(比如 React 没有自己的声明文件,可以从 Definitely Typed 获取它的声明文件)
# yarn 
yarn add --dev @types/react
# npm
npm i --save-dev @types/react

第三方代码的声明

有时,可能在某些内容上添加显式注解,并且你会在类型声明空间中使用它。

可以通过 type 快速实现它

declare type Staff = {
name:string
}

我个人倾向认为这是自定义声明,在声明文件中进行声明之后,在任何其他的文件中都可以使用,并且无需进行引入。在使用中要符合 declear 中定义的约束。

第三方 NPM 模块

可以用声明一个全局模块的方式,来解决查找模块路径的问题。

global.d.ts 是一种扩充 lib.d.ts 很好的方式,如果你需要的话。

// 定义 global.d.ts
declare module 'jquery'{
// some variable declarations
export var bar: number;
}
// 导入使用 main.js
// 在必要的时候进行导入
import * as $ from 'jquery'
// import vue from 'vue' // 如果没有进行 declare 声明,直接引入会报错

有人会声明 npm i @types/jquery

非 JS 资源

在 ts 文件中,可能引入其他类型的文件,比如 png。为了避免报错,向文件中进行声明。

// index.d.ts
declare module '*.svg'
declare module '*.png'
declare module '*.vue'{ // 用于定义以 .vue 结尾的文件,并且让 typescript 跳过识别
import type {DefineComponent} from 'vue'
const component: DefineComponent <{}, {}, any>
export default component
}
// 在声明之后就可以使用
import * as foo from './some/file.css'

参考文章

文章名称链接
深入理解TypeScriptjkchao.github.io/typescript-…
铁皮饭盒juejin.cn/post/684490…

如有错误(不当)可以在评论区指出。

转载请注明出处。

客户想要的不是她们所说的(译)

· 阅读需 5 分钟
Fall Zhang
Coding For fun

我见过的用户中,他们没有一个不是特别详细的,迫切的想告诉我他们想要的。问题是,你的客户并不能一直告诉你实事的全貌。他们一般来讲不会说谎,但是他们的说话方式是作为用户的表达方式,而不是开发者的表达方式。她们拥有他们的团队,和他们的沟通方式。她们会遗漏重要的细节,她们会当你已经在他们公司干活 20 年了,就跟他们一样熟悉。真正复杂的是,一开始他们就不知道怎么做。一些客户可能构建了宏图,但是他们很少能充分的地交流她们认为的这些“宏图”的细节。另一些客户可能不会特别的清楚,但是他们知道她们不想要什么。在她们不完整的说出他们想要的东西的情况下,我们怎样才能去开发一个项目?答案显而易见,多去配合他们。

git功能查找

· 阅读需 13 分钟
Fall Zhang
Coding For fun

下载: 从淘宝镜像上下载 git,选择最新版就可以了

npm.taobao.org/mirrors/git…

Git工作流程图(空间上的 git 操作)

img

共有四个区域

  • Workspace:工作区
  • Index / Stage:暂存区
  • Repository:仓库区(或本地仓库)
  • Remote:远程仓库
命令名称作用
clone(克隆)从远程克隆仓库,将远程的代码下载到本地
commit(提交)commit 将修改提交到本地仓库,
push(推送)push 将本地仓库的内容提交到远程库
pull(拉取)将远程最新的代码拉取到本地,自动合并 merge
fetch(获取)将远程最新的代码拉取到本地,不合并 merge
checkout(检出)创建分支,切换分支
reset将代码回退到选定的版本
tag就是给版本打个标记,方便识别

git 工具

git介绍

配置文件

.gitignore 是 git 的配置文件,可以用在用户主目录之下(全局配置),也可以用在项目目录下(项目配置),作用就是告诉Git 哪些文件不需要添加到版本管理中。

/mtk/ 过滤整个文件夹
*.zip 过滤所有.zip文件
/mtk/do.c 过滤某个具体文件
复制代码

通过上面这些规则进行过滤之后,被过滤的文件不会通过push传递到服务器,本地库中还是存在的。

!src/   不过滤该文件夹
!*.zip 不过滤所有.zip文件
!/mtk/do.c 不过滤该文件
复制代码

可以通过以上设置不过滤以上的文件

配置文件的语法

以斜杠/开头表示目录;
以星号*通配多个字符;
以问号?通配单个字符
以方括号[]包含单个字符的匹配列表;
以叹号!表示不忽略(跟踪)匹配到的文件或目录;
复制代码

配置文件示例

a、规则:fd1/*
忽略目录 fd1 下的全部内容;注意,不管是根目录下的 /fd1/ 目录,还是某个子目录 /child/fd1/ 目录都会被忽略;
b、规则:/fd1/*
说明:忽略根目录下的 /fd1/ 目录的全部内容;
c、规则:
/*
!.gitignore
!/fw/bin/
!/fw/sf/
说明:忽略全部内容,但是不忽略 .gitignore 文件、根目录下的 /fw/bin/ 和 /fw/sf/ 目录
复制代码

用 Git Bash 创建文件夹

  • 根目录下右键选择“Git Bash Here”进入bash命令窗口;
  • 输入vim .gitignoretouch .gitignore命令,打开文件(没有文件会自动创建);
  • 按i键切换到编辑状态,输入规则,例如node_modules/,然后按Esc键退出编辑,输入:wq保存退出。

生成密钥

命令行中执行命令:

ssh-keygen -t rsa -C "xxxx@gmail.com" 必须填写自己使用的邮箱

git 的操作

简单的提交代码流程

连接克隆远程仓库 git clone balabalabala.com

在项目的文件夹中打开cmd 命令行工具(一般为含有 ReadMe 的文件夹)

git add . 将代码添加到版本里面(添加到暂存区)

git commit -m “放置你想添加的内容”

最后使用 git push 将本地库里面的代码提交到网络共享库里面

常用功能查找

  • git diff --shortstat "@{0 day ago}" 看看自己一天写了多少代码
  • 查看远程仓库git remote -v
  • 显示有变更的文件git status
  • 退回到上一个版本:git reset --hard head
  • 查看日志:git log 或者 git reflog
  • 查看工作区和暂存区版本区别git diff
  • 回退上一个版本git reset --hard HEAD^ 每多一个^多回退一个版本
  • 回退到指定版本git reset --hard version version 为版本号

新建代码仓库

  • git init 在本地进行初始化(建立工作区)
  • git init [project-name] 新建一个目录,作为代码仓库
  • git clone [url]

.git 文件夹存储当前项目的所有版本信息,这个文件夹通常会隐藏

暂存区控制

$ git add [file1] [file2] ...  # 添加指定文件到暂存区
$ git add [dir] # 添加指定目录到暂存区,包括子目录
$ git add . # 添加当前目录的所有文件到暂存区

$ git add -p
# 确认所有文件的变化,并且可以做最终修改
# 对于同一个文件的多处变化,可以分多次提交

$ git rm [file1] [file2] ... # 删除工作区文件,并且将这次删除放入暂存区
$ git rm --cached [file] # 停止追踪指定文件,但该文件会保留在工作区
$ git mv [file-original] [file-renamed] # 改名文件,并且将这个改名放入暂存区
复制代码

本地仓库

$ git commit -m "message" # 提交暂存区内容提交到仓库区
$ git commit [file1] [file2] ... -m [message] # 提交暂存区的指定文件到仓库区
$ git commit -a # 提交工作区自上次 commit 之后的变化,直接到仓库区
$ git commit -v # 提交时显示所有 diff 信息

$ git commit --amend -m [message]
# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次 commit 的提交信息 message

$ git commit --amend [file1] [file2] ... # 重做上一次commit,并包括指定文件的新变化
复制代码

分支操作

$ git branch # 列出所有本地分支
$ git branch -r # 列出所有远程分支
$ git branch -a # 列出所有本地分支和远程分支

$ git checkout master # 切换到master分支下
$ git checkout -b [branch] # 新建一个分支,并切换到该分支
$ git branch [branch-name] # 新建一个分支,但依然停留在当前分支

$ git branch [branch] [commit] # 新建一个分支,指向指定commit
$ git branch --track [branch] [remote-branch] # 新建一个分支,与指定的远程分支建立追踪关系
$ git checkout [branch-name] # 切换到指定分支,并更新工作区
$ git checkout - # 切换到上一个分支

$ git branch --set-upstream [branch] [remote-branch] # 建立追踪关系,在现有分支与指定的远程分支之间
$ git merge [branch] # 合并指定分支到当前分支
$ git cherry-pick [commit] # 选择一个commit,合并进当前分支
$ git branch -d [branch-name] # 删除分支

# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
复制代码

远程功能

$ git fetch [remote] # 下载远程仓库的所有变动
$ git pull [remote] [branch] # 取回远程仓库的变化,并与本地分支合并
$ git remote -v # 显示所有远程仓库
$ git remote show [remote] # 显示某个远程仓库的信息
$ git remote add [shortname] [url] # 增加一个新的远程仓库,并命名

$ git push origin master # 推到 master 上
$ git push [remote] [branch] # 上传本地指定分支到远程仓库
$ git push [remote] --force # 强行推送当前分支到远程仓库,即使有冲突
$ git push -u origin login # 将当前子分支推到一个新创建的 login 分之中

$ git push [remote] --all # 推送所有分支到远程仓库
$ git push origin --delete [branch-name] # 删除远程分支
复制代码

撤销操作

$ git checkout [file] # 恢复暂存区的指定文件到工作区
$ git checkout [commit] [file] # 恢复某个commit的指定文件到暂存区和工作区
$ git checkout . # 恢复暂存区的所有文件到工作区
$ git reset [file] # 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变

$ git reset --hard # 重置暂存区与工作区,与上一次commit保持一致
$ git reset [commit] # 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
$ git reset --hard [commit] # 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
$ git reset --keep [commit] # 重置当前HEAD为指定commit,但保持暂存区和工作区不变

$ git revert [commit]
# 新建一个commit,用来撤销指定commit
# 后者的所有变化都将被前者抵消,并且应用到当前分支

# 暂时将未提交的变化移除,稍后再移入
$ git stash
$ git stash pop
复制代码

标签的设定和查看

$ git tag # 列出所有tag
$ git tag [tag] # 新建一个tag在当前commit
$ git tag [tag] [commit] # 新建一个tag在指定commit
$ git tag -d [tag] # 删除本地tag

$ git push origin :refs/tags/[tagName] # 删除远程tag
$ git show [tag] # 查看tag信息
$ git push [remote] [tag] # 提交指定tag
$ git push [remote] --tags # 提交所有tag
$ git checkout -b [branch] [tag] # 新建一个分支,指向某个tag
复制代码

查看日志信息

$ git status # 显示有变更的文件
$ git log # 显示当前分支的版本历史
$ git log --stat # 显示commit历史,以及每次commit发生变更的文件
$ git log -S [keyword] # 搜索提交历史,根据关键词

$ git log [tag] HEAD --pretty=format:%s # 显示某个commit之后的所有变动,每个commit占据一行
$ git log [tag] HEAD --grep feature # 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
$ git log --follow [file] # 显示某个文件的版本历史,包括文件改名
$ git whatchanged [file]

$ git log -p [file] # 显示指定文件相关的每一次diff
$ git log -5 --pretty --oneline # 显示过去5次提交
$ git shortlog -sn # 显示所有提交过的用户,按提交次数排序
$ git blame [file] # 显示指定文件是什么人在什么时间修改过

$ git diff # 显示暂存区和工作区的差异
$ git diff --cached [file] # 显示暂存区和上一个commit的差异
$ git diff HEAD # 显示工作区与当前分支最新commit之间的差异
$ git diff [first-branch]...[second-branch] # 显示两次提交之间的差异

$ git diff --shortstat "@{0 day ago}" # 显示今天你写了多少行代码
$ git show [commit] # 显示某次提交的元数据和内容变化
$ git show --name-only [commit] # 显示某次提交发生变化的文件
$ git show [commit]:[filename] # 显示某次提交时,某个文件的内容

$ git reflog # 显示当前分支的最近几次提交