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

2023-09-21 16:32:01

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

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

硬件故障诊断:快速定位问题

🌷🍁博主猫头虎(🐅🐾)带您GotoNewWorld✨🍁🦄博客首页——🐅🐾猫头虎的博客🎐🐳《面试题大全专栏》🦕文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》🐾学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》🐅学会Gol

Golang数组和slice

Golang数组和Slice(切片)Go语言中数组长度固定不可变动,slice则可以增长缩短(使用较多)一、数组类型Go语言中数组长度固定,索引从0开始计数。需要注意数组的长度一开始必须是固定的,且不同长度的数组其表示不同的数据类型,相同的数组可以进行‘==’比较。数组作为函数参数是使用的是形参的方式,函数内不可改变其

Tokenview X-ray功能:深入探索EVM系列浏览器的全新视角

Tokenview作为一家领先的多链区块浏览器,为了进一步优化区块链用户的使用体验,我们推出了X-ray(余额透视)功能。该功能将帮助您深入了解EVM系列浏览器上每个地址的交易过程,以一种直观、简洁的方式呈现地址的进出账情况,让您轻松掌握资产流转。X-ray功能特性1多级合约调用的直观展示在区块链世界中,资产流转是一个

第七章(1):深度神经网络的基本结构、训练方法和在机器学习中的重要性

第七章(1):深度神经网络的基本结构、训练方法和在机器学习中的重要性作者:安静到无声个人主页作者简介:人工智能和硬件设计博士生、CSDN与阿里云开发者博客专家,多项比赛获奖者,发表SCI论文多篇。Thanks♪(・ω・)ノ如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!o( ̄▽ ̄)d欢迎大家来到

GDAL库学习

GDAL库学习GDAL是一个操作栅格数据和矢量数据的库,对图像而言,可以进行包括读取、写入、转换、处理各种操作。文章目录GDAL库学习RasterIO()函数1.添加引用2.读取图像3.获取图像基本信息4.保存输出图像5.释放RasterIO()函数RasterIO(GDALRWFlageRWFlag,intnXOff

全网最全知识图谱讲解!

什么是知识图谱知识图谱标准化白皮书定义:知识图谱(KnowledgeGraph)以结构化的形式描述客观世界中概念、实体及其关系,将互联网的信息表达成更接近人类认知世界的形式,提供了一种更好地组织、管理和理解互联网海量信息的能力。简单讲,知识图谱由节点(point)和边(edge)组成,每个节点表示一个实体,实体可以指客

DC电源模块宽电压输入和输出的范围是多少?

BOSHIDADC电源模块宽电压输入和输出的范围是多少?直流电源模块是一种常用的电源设备,可以将交流电转换成稳定的直流电,被广泛应用于各种工业自动化、数字电子、通信设备等领域。在实际使用中,用户需要了解直流电源模块的工作电压范围,以便正确选择和使用。直流电源模块的输入电压范围通常被称为宽电压输入,是指该模块可以接受的输

全栈性能测试工具:RunnerGo

随着自动化测试技术的不断进步,自动化测试已成为企业级应用的重要组成部分。然而,传统的性能测试工具往往复杂、繁琐,让企业陷入了两难的境地。软件测试正逐渐从手动测试向自动化测试转变,各种自动化测试工具和框架层出不穷,极大地提高了测试效率和质量。近年来出现的敏捷开发方法使得软件测试需要更快地跟进开发节奏,不断适应变化。敏捷测

2023年全网最全的软件测试八股文,稳进大厂(含答案)

Part11、你的测试职业发展是什么?测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年积累测试经验,按如何做好测试工程师的要点去要求自己,不断更新自己改正自己,做好测试任务。优势在于我对测试坚定不移的信心和热情,虽然经验还不够,但测试需要的基本

ModStartCMS v7.3.0 富文本MP3支持,后台组件优化

ModStart是一个基于Laravel模块化极速开发框架。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。系统完全开源,基于Apache2.0开源协议,免费且不限制商业使用。功能特性丰富的模块市场,后台一键快速安装会员模块通用且完整,支持完整的API调用大文件分片上传,进度条显示,已

芯科蓝牙BG27开发笔记8-片上Flash读写

目标熟悉片上Flash的特点,知道如何使用,最好找到示例代码,有完整例程那是最好的查找参考手册除了768K的主空间,还包含:1.USERDATA区域,用户定义数据,可以读写。大小只有1K。2.设备特性和识别信息的DEVINFO空间3.内部生产测试和校准信息的CHIPCONFIG。RAM有两个部分:RAM0:共64K,0

热文推荐