常用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
xxx dev 配置参数,在action中获取配置
-
cross-env
:跨平台设置和使用环境变量的工具。它可以确保在不同操作系统上,使用相同的方式设置环境变量。 -
mime-types
:用于获取文件扩展名或 MIME 类型的工具包。它可以根据文件的扩展名或 MIME 类型来确定相应的 MIME 类型。 -
minimist
:一个轻量级的命令行参数解析工具。它可以将传入的命令行参数解析为 JavaScript 对象,使得处理命令行参数变得更加简单。 -
path-browserify
:在浏览器中模拟 Node.js 的path
模块的工具包。它允许您在浏览器环境中使用path
模块的方法,如join
、resolve
等。 -
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!'));
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
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'))
latestVersion
用于获取指定包名的最新版本号
import latestVersion from 'latest-version';
latestVersion('lodash').then((version) => {
console.log(`最新版本号: ${version}`);
}).catch((error) => {
console.error(error);
});
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进行包管理');
}
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);
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);//
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"
持续更新中...