package中添加一条命令,用来自动选择包管理器进行依赖安装

package中添加一条命令,用来自动选择包管理器进行依赖安装

前提: 当前项目为vite项目,所以直接使用import导入模块

package.json中的scripts添加

json 复制代码
"scripts": {
    "start": "node scripts/init.js"
    ...
  },

文件目录为

init.js的文件为

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 方法的主要特征和用法如下:

  1. 同步执行命令,会阻塞 Node.js 事件循环直到命令执行完成。

  2. 返回shell命令标准输出结果。

  3. 抛出错误时可捕获到错误信息。

  4. 用法:

    js 复制代码
    const { execSync } = require('child_process');
    
    try {
      const output = execSync('node -v');
      console.log(output.toString()); 
    } catch (err) {
      console.error(err); 
    }
  5. 选项:

    • cwd - 子进程的当前工作目录
    • input - 输入给命令的内容
    • stdio - 子进程 stdin/stdout/stderr 配置
    • env - 环境变量键值对
    • shell - 子进程的 shell
    • uid/gid - 设置用户/组 id
  6. 和 exec 的区别是 execSync 是同步的,没有回调函数,会阻塞进程。

  7. 在同步场景下性能更好,但不能在异步回调中使用。

chalk GitHub地址

在 Node.js 中,chalk 是一个常用的命令行字符串样式工具库。

chalk 提供了设置文字颜色、背景颜色、加粗、下划线等样式的方法,例如:

js 复制代码
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 模块为我们提供了简单方便的方法来给终端字符串添加样式,使输出内容更生动、清晰。
相关推荐
遇见你...12 分钟前
TypeScript
前端·javascript·typescript
Highcharts.js19 分钟前
Highcharts Grid 中文站正式上线:表格数据处理的全新选择
前端·javascript·数据库·表格数据·highcharts·可视化图表·企业级图表
阿正的梦工坊3 小时前
JavaScript 微任务与宏任务完全指南
开发语言·javascript·ecmascript
懂懂tty4 小时前
CRA 迁移 Rspack(实战)
前端·架构
小码哥_常5 小时前
Kotlin 助力 Android 启动“大提速”
前端
GreenTea5 小时前
AI 时代,工程师的不可替代性在哪里
前端·人工智能·后端
Jagger_5 小时前
能不能别再弄低代码害人了
前端
朦胧之5 小时前
AI 编程开发思维
前端·后端·ai编程
踩着两条虫6 小时前
VTJ:快速开始
前端·低代码·架构
木斯佳7 小时前
前端八股文面经大全:携程前端一面(2026-04-17)·面经深度解析
前端·状态模式