git reset --hard origin/master
项目使用的是 ElementPlus 组件库,在做组件的二次封装时,需要提取 ElTableColumn 组件的属性,网上搜索了一下,可以这样得到属性的类型:
import { ElTableColumn } from 'element-plus'
type TElTableProps = InstanceType<typeof ElTableColumn>['$props'];
Vite 以启动快著称,我的项目也使用了 Vite ,但启动速度却不是想象中的那么快。项目使用的是 ElementPlus 组件库,根据官方文档的推荐使用了 unplugin-vue-components 做按需引入,随着项目越做越大,启动速度也是越来越慢。
由于实在是太慢了,所以做了一次排查,最后发现是使用了 unplugin-vue-components 导致慢,将 ElementPlus 改成全量加载启动速度是非常的快。翻了一下 unplugin-vue-components 的 GitHub Issues ,原来也有其他人遇到同样的问题。作者说是 Vite 的问题 #301
在使用 vue-i18n 时发现 t()
函数是有类型提示的,并且类型就是从 message
对象中推导出来的。于是我也尝试写一下这个类型推导。
假如有一个对象 message
:
const message = {
a: {
b: {
c: {
d: '1'
}
},
b1: '2'
}
}
从该对象中获取如下类型:
type KeyPath = 'a.b.c.d' | 'a.b1'
使用路径别名可以大大减少项目中 ../
、../../
的情况。但配置路径别名则需要分别对 Vite 、TypeScript 、 ESLint 进行单独的配置。
- 配置 Vite 可以避免编译出错(如
npm run dev
、npm run build
)。 - 配置 TypeScript 可以避免 ts 报错( Cannot find module ... )。
- 配置 ESLint 可以避免 eslint 报错(如果使用了 airbnb 代码风格)
给定下面数组对象,从该对象中提取出 TName
和 TAge
两个类型
const students = [
{ name: 'Tom', age: 10 },
{ name: 'Jim', age: 12 },
{ name: 'Jack', age: 11 },
]
// 需要得到的类型:
type TName = 'Tom' | 'Jim' | 'Jack'
type TAge = 10 | 12 | 11
import os from 'os'
import { execSync } from 'child_process'
function cmdExists(cmd: string) {
try {
execSync(
os.platform() === 'win32'
? `cmd /c "(help ${cmd} > nul || exit 0) && where ${cmd} > nul 2> nul"`
: `command -v ${cmd}`,
)
return true
}
catch {
return false
}
}
preinstall
从字面意思理解是在 install
之前执行。但到了 NPM 7.0 版本以后就有所不同。
我的项目使用的是 pnpm 包管理器,但在 pnpm install
之前需要执行脚本来处理 package.json
文件,所以用到了 preinstall
脚本,但 preinstall
执行的时机跟预想的不一样: preinstall
实际上是在 install
之后执行的(即安装完依赖之后执行的)。在 pnpm 的 GitHub 里面找到了相似问题的 Issue ,从这里找到了答案,原来是 NPM 的问题。