node bin tools
npm install @irim/bin-toolnode bin 的一些必要的工具方法集
- $ npm install @irim/bin-tool --save
#### 1. logger(...args) 同 console.log
#### 2. print(type, msg) print console log
``ts`
/**
* @param type 日志类型
* @param msg 日志内容
*/
function print(type: 'debug'|'info'|'success'|'warn'|'error', msg: string): void;
#### 3. printJSON(json) 打印一个简单的 JSON
#### 4. parseProperties(file) 解析 .properties 文件,返回一个 JSON
`ts`
/**
* @param file 文件地址
*/
export async function parseProperties(file: string): Promise
#### 5. getProgressStr(recent, total, label) 返回一个进度条 string
`ts`
/**
* @param recent 当前进度
* @param total 总量
* @param label 前缀文字
*/
function getProgressStr(recent: number, total?: number, label?: string): string;
#### 6. sleep(millseconds): Promise 睡眠 xx 毫秒
#### 7. parseValue(data, key) 从对象中解析出 key 的值
#### 8. templateRender(tpl, data): string 简单的模板渲染,使用 {{xxx}} 表示变量
#### 1. fileIterator(...) 遍历文件目录,执行 callback
`ts`
/**
* @param src 目录路径
* @param fileCallback 执行到文件时的回调
* @param dirCallback 执行到目录时的回调
* @param exclude 忽略的文件
*/
function fileIterator(
src: string,
fileCallback: (filePath: string, fileRelativePath: string) => any,
dirCallback?: (dirRelativePath: string) => any,
exclude?: RegExp,
): Promise
#### 2. dirSyncIterator(...) 遍历文件目录,同步到目标目录,并对每一个文件执行 callback
`ts`
/**
* @param source 源文件目录
* @param target 目标目录
* @param callback
* @param exclude 忽略的文件规则
*/
function dirSyncIterator(
source: string,
target: string,
callback: (sourceFile: string, targetFile: string) => any,
exclude?: RegExp
): Promise
#### 3. getFileCount(src, exclude) 统计目录中的文件数量
`ts`
/**
* @param src 目录路径
* @param exclude 忽略的文件
*/
function getFileCount(src: string, exclude?: RegExp): Promise
#### 4. copyDir(options) 复制文件目录
`ts
interface OptionShape {
/* 文件来源目录 /
src: string;
/* 目标目录 /
dist: string;
/* 文件内容替换规则 /
replacer?: { holder: RegExp; value: string }[];
/* 忽略的文件 /
exclude?: RegExp;
/* 只读文件(不读取&替换的文件) /
readonlyFile?: RegExp;
/* 文件名替换方法 /
fileNameTransfer?: (name: string) => string;
/* 文件内容格式化方法 /
contentFormatter?: (content: string, src: string) => Promise
}
const defaultOptions: OptionShape = {
exclude: /node_modules\/|build\/|\.DS_Store\/|\.idea\/|\.paiconfig|\.git\/|\.bak/,
readonlyFile: /\.(png|jpe?g|gif|svg|obj|mtl|geojson|gltf|mp4|min\.js|min\.css)$/,
fileNameTransfer: (name: string) => name.replace(/^__/, '.').replace(/^_/, ''),
};
async function copyDir(options: OptionShape): Promise
`
#### 5. clearDir(options) 清除文件目录
`ts
export interface ClearOptions {
/* 要清除的目录 /
src: string;
/* 是否有二次确认 /
confirm?: boolean;
/* 二次确认文案 /
confirmText?: string;
/* 忽略的文件 /
exclude?: RegExp;
}
const defaultClearOptions: ClearOptions = {
confirm: true,
confirmText: '请确认要清空的目录: {{src}}',
};
async function copyDir(options: OptionShape): Promise
`
#### 6. findInFolder(src, callback, options) 查找内容符合条件的文件
`ts`
export async function findInFolder(
// 文件目录
src: string,
// 文件校验规则,传入参数是文件的内容
callback: (filePath: string, content: string) => boolean,
options: {
/* 是否找到所有文件,默认 false,即找到第 1 个就返回 /
all?: boolean;
/* 如果指定了 include,则只处理匹配的文件 /
include?: RegExp;
/* 匹配规则的文件跳过 /
exclude?: RegExp;
/* 文件大小限制(byte),超过大小的文件不遍历 /
limit?: number;
/* 读取文件的编码,默认是 utf-8 /
encoding?: BufferEncoding;
} = {}
): Promise<{
filePath: string;
fileRelativePath: string;
fileSize: number;
}[]>
#### 1. confirm(message, defaultValue) node 控制台二次确认
`ts`
/**
* @param message 提示信息
* @param defaultValue 默认值
* @example
* const isUpdate = await confirm('请确认是否要升级?');
*/
function confirm(message: string, defaultValue = false): Promise
#### 2. prompt(...) node 控制台用户输入
`ts`
/**
* @param message 提示信息
* @param defaultValue 默认值
* @example
* const username = await prompt('请输入用户名:');
*/
function prompt(message: string, defaultValue = ''): Promise
`ts`
/**
* @param message 提示信息
* @param options 选项
* @param defaultValue 默认值或默认的选项 index
* @example
* const value = await select('请选择性别: ', ['男', '女']);
*/
function select(
message: string,
options: SelectOptions[] | string[],
defaultValue: string | number
): Promise
`ts`
await holding('确认后,请按回车继续...');
- 1.0.0 发布最初版本,完成基本功能集
- 1.1.0 修改 getProgressStr 参数,新增 clearDir, parseValue, templateRender 等方法input
- 1.1.2 新增 , password, holding 交互方法findInFolder` 方法
- 1.2.0 新增
- add jest framework and test case.
BSD-3-Clause License