package
中添加一条命令,用来自动选择包管理器进行依赖安装
前提: 当前项目为vite
项目,所以直接使用import
导入模块
package.json
中的scripts
添加
"scripts": {
"start": "node scripts/init.js"
...
},
文件目录为
init.js
的文件为
import { execSync } from "child_process"
import chalk from "chalk"
const moduleUitls = ["pnpm", "yarn", "npm"]
const leng = moduleUitls.length
for (let index = 0; index < leng; index++) {
const element = moduleUitls[index]
try {
const getOutPut = execSync(`${element} -v`)
console.log(123123)
console.log(
chalk.green(`${element} 的版本是: `),
chalk.bgBlue(`${getOutPut}`)
)
console.log(chalk.yellow("开始安装依赖: "))
execSync(`${element} install`, { stdio: "inherit" })
console.log(chalk.yellow("依赖安装完成!!!!"))
break
} catch (error) {
console.log(chalk.red(`${element}可能有问题, 开始使用其他包管理器`))
if (index === leng - 1) {
// 说明所有包管理器都有问题
console.log(chalk.red(`${moduleUitls.join(",")}可能都有问题`))
}
}
}
说明
child_process"
官网地址
Node.js 中 child_process 模块的 execSync 方法用于同步执行 shell 命令。
execSync 方法的主要特征和用法如下:
- 同步执行命令,会阻塞 Node.js 事件循环直到命令执行完成。
- 返回shell命令标准输出结果。
- 抛出错误时可捕获到错误信息。
- 用法:
const { execSync } = require('child_process'); try { const output = execSync('node -v'); console.log(output.toString()); } catch (err) { console.error(err); }
- 选项:
- cwd - 子进程的当前工作目录
- input - 输入给命令的内容
- stdio - 子进程 stdin/stdout/stderr 配置
- env - 环境变量键值对
- shell - 子进程的 shell
- uid/gid - 设置用户/组 id
- 和 exec 的区别是 execSync 是同步的,没有回调函数,会阻塞进程。
- 在同步场景下性能更好,但不能在异步回调中使用。
chalk GitHub地址
在 Node.js 中,chalk 是一个常用的命令行字符串样式工具库。
chalk 提供了设置文字颜色、背景颜色、加粗、下划线等样式的方法,例如:
import chalk from 'chalk'
// 设置文字为蓝色
chalk.blue('Hello world!');
// 设置背景为红色,文字为白色加粗
chalk.red.bgWhite.bold('Hello world!');
// 下划线
chalk.underline('Hello world!');
常用方法:
- chalk.red/green/blue 等设置颜色
- chalk.bold 设置粗体
- chalk.bgRed/bgGreen等 设置背景色
- chalk.underline 设置下划线
chalk 支持链式调用设置多种样式。
这样可以在 Node.js 命令行程序中打印更醒目的文字和样式。
所以 chalk 模块为我们提供了简单方便的方法来给终端字符串添加样式,使输出内容更生动、清晰。