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

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

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

package.json中的scripts添加

"scripts": {
    "start": "node scripts/init.js"
    ...
  },

文件目录为
package中添加一条命令,用来自动选择包管理器进行依赖安装_第1张图片

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

  1. 同步执行命令,会阻塞 Node.js 事件循环直到命令执行完成。
  2. 返回shell命令标准输出结果。
  3. 抛出错误时可捕获到错误信息。
  4. 用法:
    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 提供了设置文字颜色、背景颜色、加粗、下划线等样式的方法,例如:

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 模块为我们提供了简单方便的方法来给终端字符串添加样式,使输出内容更生动、清晰。

你可能感兴趣的:(JavaScript,NodeJS,Vue,javascript,前端)