@xdoer/script-runner
v1.0.3
Published
Manage、parse and run scripts
Downloads
36
Readme
ScriptRunner
管理,解析和执行你的脚本
前言
当项目遇到大量重复性代码,我们会想到编写脚本完成重复性工作。
当项目越大,脚本数量也会越来越多,如何管理是难题,如何复用也是难题。
脚本复用,可以将一些定制化的数据通过函数传参传入,这也意味着,脚本需要导出一个函数。
如何管理?可以使用一个入口文件,在入口文件中引入并配置和执行所有的脚本,这样,启动项目时,先运行脚本入口文件即可。
上面介绍的流程有几个缺陷。
- 全量执行。脚本导出函数,意味着脚本不能直接使用 node 执行,如果项目只需要执行脚本 A,那么只能执行入口脚本文件,此时所有脚本都会执行。
- 脚本模块规范。所有脚本都只能使用同一种模块规范,才能在入口文件中进行引用。否则还需要借助三方工具进行代码转换
ScriptRunner 可以很好的解决上述问题。它是一款 CLI 工具,可以管理和执行 cjs, esm 和 ts 的代码,你可以用自己喜欢的语法编写脚本。它会根据注册的模块,批量或者单独的执行脚本,一切随你的喜好而来。
安装
npm i @xdoer/script-runner
使用
注册命令
当你全局安装时,命令会被全局注册,意味着你可以在任意地方运行 scr
命令。
当安装到项目中时,你可以直接在 shell 中运行
./node_modules/.bin/scr
你也可以将 scr 写到 package.json 的 script 中, 通过 npm run scr
来运行命令
script: {
"scr": "scr"
}
配置文件
ScriptRunner 支持直接解析和执行 cjs、esm 和 ts 的脚本代码,配置文件同样支持 cjs,esm 与 ts。示例请查看:example
在没有显示指定配置文件的情况下,程序将在项目根目录,查找 scr.config.[js|ts]
的配置文件.
module.exports = {
scripts: [
{
module: "@prequest/response-types-generator", // 脚本入口文件
group: 1, // 分组
// 模块类型
args: [
// 脚本参数
{
data: [
{
path: "https://cnodejs.org/api/v1/topics",
},
],
},
],
},
{
module: "@prequest/response-types-generator/es6/index.js",
args: [
{
data: [
{
path: "https://cnodejs.org/api/v1/topics",
},
],
},
],
// 传入 subProcess 配置项,模块将在子进程中运行
subProcess: true,
},
{
module: "@prequest/response-types-generator/src/index.ts",
args: [
{
data: [
{
path: "https://cnodejs.org/api/v1/topics",
},
],
},
],
},
],
};
编写脚本规范
编写的脚本需要默认导出一个函数,ScriptRunner 会根据配置文件中配置的模块,查找脚本,并将配置的 args
参数传递到脚本中执行。这样的好处在于,我们的脚本可以根据传参,执行不同的逻辑,也为脚本发布 NPM 包,供他人使用提供了便利
脚本 demo:
interface Config {}
export default function main(config: Config) => {
}
export type Args = Parameters<typeof main>;
配置:
import { Config } from "@xdoer/script-runner/lib/types";
import { Args } from "your package";
export default <Config>{
scripts: [
{
module: "your package",
args: <Args>[{}],
},
],
};
CLI 命令
scr -v
版本查看scr -h
查看帮助scr -l
查看配置的脚本scr -r 1
或者scr -r chokidar
执行第一个脚本或者执行 module 为 index.js 的脚本scr -c /User/xdoer/a.js
指定配置文件scr -g 1
运行分组 1 的脚本