command queue
npm i -g @mxssfd/cmd-que
cmd-que
- 基础功能
- 通过控制台输入指令启动:获取控制台输入的命令
- 运行命令
- 运行多个命令
- 通过指定配置文件执行
- 进阶功能
- 前后生命周期
- 遍历文件夹查找匹配运行
- url模板替换
- 执行配置中的命令
- 执行配置中的js
- 监听文件改动
- 可通过指令显示隐藏log
- 可通过指令显示隐藏运行时间
- npm全局一次安装,随处执行
- 额外功能
- 搜索文件或文件夹
- 忽略大小写
- 忽略文件夹
- 帮助功能
- 打开文件
- 直接运行文件
- 在打开资源管理器并选中目标文件
- 在cmd控制台打开对应的路径
- 搜索文件或文件夹
- 配置
- 依次执行多个命令;
- 生命周期回调
- 忽略文件夹
- 匹配规则
- 匹配成功
- 执行相应命令;
- 执行相应js;
- 匹配成功
方便挂载在webstorm上的file watcher里
注意:多条命令用,隔开,命令用引号"包起来
cmd-que -command="node -v,node -h"
type execFn = (command: string) => Promise<string>;
/**
* @param eventName 事件名
* @param path 触发改动事件的路径
* @param ext 触发改动事件的文件后缀
* @param exec 执行命令函数
*/
type onFn = (eventName: string, path: string, ext: string, exec: execFn) => Promise<void>
type Rule = {
test: RegExp,
on: onFn,
command: string[];
};
type RuleOn = Omit<Rule, "command">;
type RuleCmd = Omit<Rule, "on">;
type Rules = Array<RuleOn | RuleCmd>;
interface Config {
beforeStart: (exec: execFn) => void;
beforeEnd: (exec: execFn) => void;
}
interface ExecCmdConfig extends Config {
command: string[]; // 直接执行命令列表 占位符会被替换
}
interface WatchConfig extends Config {
exclude?: RegExp[]; // 遍历时忽略的文件夹
include?: string[] | string; // 要遍历/监听的文件夹路径 // 默认为当前文件夹
rules: Rules
}
注意相对路径是相对于启动命令所在路径
config.js
module.exports = {
command: [
"stylus test/test.styl",
"stylus E:\\project\\cmd-que\\test\\test1.styl",
]
}
cmd-que -c=config.js
config.js
module.exports = {
exclude: [
/node_modules/,
/\.git/,
/\.idea/,
],
rules: [
{
test: /\.styl$/,
command: [
// $FilePath$占位符
"stylus <$FilePath$> $FileDir$\\$FileNameWithoutAllExtensions$.wxss",
"node -v"
]
}
]
};
cmd-que -c=config.js
config.js
module.exports = {
beforeEnd(exec) {
return exec("pug $Cwd$")
},
exclude: [
/node_modules/,
/\.git/,
/\.idea/,
/src/,
/bin/,
],
include: ["./test"],
rules: [
{
test: /\.styl$/,
on: async (eventName, path, ext, exec) => {
if (eventName === "delete") return;
const result = await exec("stylus $FilePath$");
console.log(result)
}
},
{
test: /\.ts$/,
on: (eventName, path, ext, exec) => {
if (eventName === "delete") return;
return exec("tsc $FilePath$");
}
},
]
};
cmd-que -c=config.js
config.js
module.exports = {
beforeEnd() {
console.log("end")
},
rules: [
{
test: /\.styl$/,
// on 和 command二选一 都存在时用on
/*on: async (eventName, path, ext, exec) => {
if (eventName === "delete") return;
const result = await exec("stylus $FilePath$");
console.log(result)
},*/
command: [
"stylus $FilePath$",
"node -v"
]
},
],
exclude: [
/node_modules/,
/\.git/,
/\.idea/,
/src/,
/bin/,
],
include: ["./test"],
};
cmd-que -c=config.js -w
cmd-que -s=test\.js -sf=ig -se=node_modules,\.git
可以在config.js里的rules.on里更加自由的操作,比如查找并删除文件,搜索文本内容等功能