前言
最近接触到一个新项目,项目架构是lerna + vue2 + tailwindcss,好多都是我之前没接触过的技术,包括像nvm,lerna,tailwind和momentJs,下面我做了小小的总结,方便以后自己做回顾,同时也希望能帮到读者了解这些技术
多包管理工具lerna
多包管理工具lerna,旨在优化基于git+npm的多package项目的包管理模式,想现在流行的vue-cli,create-react-app等脚手架工具都有用到lerna
作为一种多包依赖解决方案,lerna具有以下特点:
- 可以管理公共依赖和单独依赖
- 多package相互依赖直接内部 link,不必发版;
- 支持项目的单独发布和全体发布;
- 多包放一个git仓库,利于代码管理,如配置统一的代码规范
lerna的两种工作模式
- Fixed/locked模式:lerna会把工程当作一个整体来对待,每次发布packages,都是全量发布,无论修改与否
- Independent模式:lerna会配合Git,检查文件变动,只发布有改动的包
安装并初始化
全局安装lerna
yarn global add lerna
#or
npm install lerna -g
如果在已经存在的项目中安装lerna,使用以下方式
lerna bootstap
初始化项目和npm方式类似
//默认是固定模式,packages下的所有包共用一个版本号
lerna init
// 如果使用独立模式,需要在init后面加一个参数
lerna init --independent
执行上面的命令后,lerna会创建一个lerna.json配置文件和packages文件夹
{
"version": "1.1.3", // 版本号,用于指定 lerna 的版本
"npmClient": "npm", // 指定使用的 npm 客户端工具,可以是 npm 或者 yarn
"command": {
"publish": { // 发布命令的配置
"ignoreChanges": ["ignored-file", "*.md"], // 忽略的更改文件,这些文件的更改不会触发发布操作
"message": "chore(release): publish", // 发布操作的提交消息
"registry": "https://npm.pkg.github.com" // 发布到的注册表,这里是 GitHub Packages 的注册表地址
},
"bootstrap": { // 初始化命令的配置
"ignore": "component-*", // 忽略的初始化包,以匹配指定的通配符表达式
"npmClientArgs": ["--no-package-lock"] // 传递给 npm 客户端命令的额外参数
}
},
"packages": ["packages/*"] // 包含的包的路径,这里是使用通配符指定的包的路径模式
}
其他一些常见命令
除了上面的init命令外,项目使用过程中还会用到很多其他有用的命令
- lerna create:此命令的作用是用来创建一个子包名为xx的项目。
- lerna add:此命令用于安装依赖,格式为lerna add [@version] [–dev]。
- lerna list:查看当前包名列表。
- lerna link:将所有相互依赖的包符号链接在一起。
- lerna exec:在每个包中执行任意命令。
- lerna run:在每个包中运行npm脚本如果该包中存在该脚本。
参考文章
tailwind
Tailwind CSS 是一个现代的、实用的 CSS 框架,Tailwind CSS 使用了一种称为 “原子类” 的概念,即为每个样式属性提供了单独的类,例如 p-4 表示设置 padding:4px,通过这种原子类,开发者无需编写自定义的 CSS 代码,可以通过简单地添加或删除类名来实现样式的改变,从而提高了开发效率。
这么多的样式,每次要写如果都要查文档,那不是很麻烦,vscode这里有一个插件,输入相关css属性就会有提示(记得先打个空格触发)
具体的安装和使用可以看神光大佬的这篇文章
快速掌握 Tailwind:最流行的原子化 CSS 框架 - 掘金
nvm
nvm 指的是 Node Version Manager(节点版本管理器)。它是一个用于管理和切换多个 Node.js 版本的工具
安装流程
一步到位——Node版本管理神器nvm安装教程(2023最新)_nvm安装node-CSDN博客
快速使用
安装目标版本。
nvm install v12.14.0
查看已安装 Node 版本
nvm ls
切换到已安装的其它版本
nvm use v16.17.0
时间处理插件momentJs
之前处理时间都是使用JS自带的Date对象,这个项目中使用了momentJs插件,实际使用下来发现真的很好用
比如获取昨天凌晨三点的时间 2023-12-18 03:00:00
this.$moment().subtract(1, 'day').startOf('day').add(3, 'hour').format('YYYY-MM-DD HH:mm:ss')
也可以通过valueOf()转为毫秒字符串
this.$moment().subtract(1, 'day').startOf('day').add(3, 'hour').valueOf()
获取上一个自然周的时间
startTime: this.$moment().subtract(1, 'weeks').startOf('week').format('YYYY-MM-DD')
endTime: this.$moment().subtract(1, 'weeks').endOf('week').format('YYYY-MM-DD')
详细的使用可以参考这个文章,讲得很详细