常用npm包使用

388 阅读6分钟

常用npm包统计

cac

Command And Conquer 是一个用于构建 CLI 应用程序的 JavaScript 库

常见使用

import { cac } from 'cac'

// 创建一个新的命令行应用程序实例
const cli = cac('vite')

// 添加命令配置选项 -c 简写 --config全称 <file> 数字或字符串 [boolean] 布尔值 可以添加默认值
cli.option('-c, --config <file>', `[string] use specified config file`)
    .option('-m, --mode <mode>', `[string] set env mode`,{default:'dev'})

// dev 添加命令例如yarn serve 实际出发action中的回调 alias配置别名
cli.command('[root]', 'start dev server') // 默认命令
    .alias('serve') // 在 Vite 的 API 中命令被称为 'serve'
    .alias('dev') // 别名与脚本名称对齐
    .option('--port <port>', `[number] specify port`) // 指定端口的选项
    .option('--cors', `[boolean] enable CORS`) // 启用CORS的选项
    .action((root, options) => {
        console.log('打印***root,options', root, options)
    })

cli.help()
cli.version('1.0.0')

const parsed = cli.parse()

console.log(parsed, JSON.stringify(parsed, null, 2))

运行--help image.png

xxx dev 配置参数,在action中获取配置

image.png

  • cross-env:跨平台设置和使用环境变量的工具。它可以确保在不同操作系统上,使用相同的方式设置环境变量。

  • mime-types:用于获取文件扩展名或 MIME 类型的工具包。它可以根据文件的扩展名或 MIME 类型来确定相应的 MIME 类型。

  • minimist:一个轻量级的命令行参数解析工具。它可以将传入的命令行参数解析为 JavaScript 对象,使得处理命令行参数变得更加简单。

  • path-browserify:在浏览器中模拟 Node.js 的 path 模块的工具包。它允许您在浏览器环境中使用 path 模块的方法,如 joinresolve 等。

  • dotenv:从环境变量文件(如.env)中加载配置的工具包。您可以使用这个工具包来存储敏感信息(如数据库凭据)或其他配置选项,并从应用程序中轻松地读取这些值。

  • debug:一个小巧而强大的调试工具,用于在开发过程中输出调试信息,并可以根据环境变量控制调试信息的输出。

  • chalk:一个用于在命令行中添加颜色和样式的工具包。它可以帮助您创建易于阅读和美观的命令行输出。

  • rimraf:一个用于递归删除文件或目录的工具包。它类似于 rm -rf 命令,能够删除指定路径下的所有内容,包括子目录。

  • release-it:一个功能强大的发布管理工具,用于自动化软件版本发布过程。它可以帮助您处理版本号的增加、生成发布日志、发布到版本控制系统等任务。

  • release-please:一个用于自动生成软件版本发布的工具。它可以根据提交历史和标签信息,自动决定下一个版本号,并生成相应的发布日志和标签。

  • inquirer 命令提示

  • ossutil cp -r /user_tmp_dir/* oss://fuyunlong/admin/ --update

ConfigStore

用于在本地存储和获取配置数据

import ConfigStore from 'configstore';

const config = new ConfigStore('my-app');

config.set('username', 'john');
console.log(config.get('username')); // 输出: john

chalk

提供了在终端中输出带有颜色和样式的文本的功能。

import chalk from 'chalk';

console.log(chalk.red('Error!'));
console.log(chalk.yellow('Warning!'));
console.log(chalk.green.bold('Success!'));

image.png

semver

语义化版本控制的工具包。它提供了一些方法,用于解析、比较和操作版本号。

import semver from 'semver';

console.log(semver.valid('1.2.3')); // 输出: 1.2.3
console.log(semver.gt('1.2.3', '1.1.0')); // 输出: true

image.png

semver-diff

计算两个版本之间的差异

import semverDiff from 'semver-diff';

console.log('打印***patch',semverDiff('1.0.1', '1.0.2'))
console.log('打印***minor',semverDiff('1.0.1', '1.1.2'))
console.log('打印***major',semverDiff('1.0.1', '2.1.2'))

image.png

latestVersion

用于获取指定包名的最新版本号

import latestVersion from 'latest-version';

latestVersion('lodash').then((version) => {
  console.log(`最新版本号: ${version}`);
}).catch((error) => {
  console.error(error);
});

image.png

isNpmOrYarn

函数用于判断当前项目是使用NPM还是Yarn进行包管理,具体点就是使用yarn dev还是npm dev

import {isNpmOrYarn,isNpm,isYarn} from 'is-npm';
console.log('打印***isNpmOrYarn,isNpm,isYarn',isNpmOrYarn,isNpm,isYarn)
if (isNpmOrYarn) {
  console.log('当前项目使用NPM或Yarn进行包管理');
} else {
  console.log('当前项目不使用NPM或Yarn进行包管理');
}

image.png

is-installed-globally

用于判断当前模块是否全局安装

if (isInstalledGlobally) {
  console.log('当前模块是全局安装的');
} else {
  console.log('当前模块不是全局安装的');
}

is-yarn-global

用于判断当前项目是否使用yarn全局安装的

import isYarnGlobal from 'is-yarn-global';

if (isYarnGlobal()) {
  console.log('当前项目是使用Yarn进行全局安装的');
} else {
  console.log('当前项目不是使用Yarn进行全局安装的');
}

has-yarn

用于判断当前项目是否使用Yarn进行包管理

import hasYarn from 'has-yarn';

if (hasYarn()) {
  console.log('当前项目使用Yarn进行包管理');
} else {
  console.log('当前项目不使用Yarn进行包管理');
}

boxen

用于在终端中创建带有边框的框

import boxen from 'boxen';

const text = 'Hello, World!';
const box = boxen(text, {padding: 1, borderColor: 'green'});

console.log(box);

image.png

xdg-basedir

xdgConfig对象包含了一些标准的XDG配置目录的路径

import {xdgConfig} from 'xdg-basedir';

console.log(xdgConfig); // 输出: C:\Users\admin\.config

is-ci

用于判断当前代码是否在CI/CD环境中运行

import isCi from 'is-ci';

if (isCi) {
  console.log('当前代码在CI/CD环境中运行');
} else {
  console.log('当前代码不在CI/CD环境中运行');
}

pupa

用于将模板字符串中的占位符替换为对应的值

import pupa from 'pupa';

const template = 'Hello, {name}!';
const result = pupa(template, { name: 'John' });

console.log(result);//

image.png

graceful-fs

通过替换Node.js内置的fs模块来提供更加稳定和优化的文件系统操作功能。

示例用法与fs模块类似,只需要将fs替换为graceful-fs来导入和使用

write-file-atomic

用于原子性地写入文件。它提供了一个函数 writeFileAtomic,用于将数据写入指定的文件,确保在写入过程中不会丢失数据。

import path from 'path'
import process from 'process'
import writeFileAtomic from 'write-file-atomic';

const filePath = path.join(process.cwd(),'/file.txt');
const data = 'Hello, World!';

writeFileAtomic(filePath, data, (err) => {
  if (err) {
    console.error(err);
    return;
  }

  console.log('文件写入成功');
});

dot-prop

用于通过点语法访问和修改对象的属性。它提供了几个函数,如 get 用于获取对象的属性值,set 用于设置对象的属性值,以及 has 用于检查对象是否拥有指定的属性。

import {getProperty, setProperty, hasProperty, deleteProperty} from 'dot-prop';

// Getter
getProperty({foo: {bar: 'unicorn'}}, 'foo.bar');
//=> 'unicorn'

getProperty({foo: {bar: 'a'}}, 'foo.notDefined.deep');
//=> undefined

getProperty({foo: {bar: 'a'}}, 'foo.notDefined.deep', 'default value');
//=> 'default value'

getProperty({foo: {'dot.dot': 'unicorn'}}, 'foo.dot\\.dot');
//=> 'unicorn'

getProperty({foo: [{bar: 'unicorn'}]}, 'foo[0].bar');
//=> 'unicorn'

// Setter
const object = {foo: {bar: 'a'}};
setProperty(object, 'foo.bar', 'b');
console.log(object);
//=> {foo: {bar: 'b'}}

const foo = setProperty({}, 'foo.bar', 'c');
console.log(foo);
//=> {foo: {bar: 'c'}}

setProperty(object, 'foo.baz', 'x');
console.log(object);
//=> {foo: {bar: 'b', baz: 'x'}}

setProperty(object, 'foo.biz[0]', 'a');
console.log(object);
//=> {foo: {bar: 'b', baz: 'x', biz: ['a']}}

// Has
hasProperty({foo: {bar: 'unicorn'}}, 'foo.bar');
//=> true

// Deleter
const object1 = {foo: {bar: 'a'}};
deleteProperty(object1, 'foo.bar');
console.log(object1);
//=> {foo: {}}

object1.foo.bar = {x: 'y', y: 'x'};
deleteProperty(object1, 'foo.bar.x');
console.log(object1);
//=> {foo: {bar: {y: 'x'}}}

unique-string

用于生成唯一的字符串。它提供了一个函数 uniqueString,用于生成一个基于时间戳的唯一字符串。

import uniqueString from 'unique-string';

const uniqueId = uniqueString();

console.log(uniqueId); // 输出一个唯一的字符串,如 "041e3af25e30c195170a99149094515c"

持续更新中...