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 模块为我们提供了简单方便的方法来给终端字符串添加样式,使输出内容更生动、清晰。
相关推荐
非著名架构师8 分钟前
js混淆的方式方法
开发语言·javascript·ecmascript
多多米100542 分钟前
初学Vue(2)
前端·javascript·vue.js
敏编程1 小时前
网页前端开发之Javascript入门篇(5/9):函数
开发语言·javascript
柏箱1 小时前
PHP基本语法总结
开发语言·前端·html·php
新缸中之脑1 小时前
Llama 3.2 安卓手机安装教程
前端·人工智能·算法
hmz8561 小时前
最新网课搜题答案查询小程序源码/题库多接口微信小程序源码+自带流量主
前端·微信小程序·小程序
看到请催我学习1 小时前
内存缓存和硬盘缓存
开发语言·前端·javascript·vue.js·缓存·ecmascript
blaizeer2 小时前
深入理解 CSS 浮动(Float):详尽指南
前端·css
编程老船长2 小时前
网页设计基础 第一讲:软件分类介绍、工具选择与课程概览
前端
编程老船长2 小时前
网页设计基础 第二讲:安装与配置 VSCode 开发工具,创建第一个 HTML 页面
前端