Taskr 使用教程 [ NextJs 构建工具 ]
Taskr
官方文档
Taskr
是一个类似 gulp
的高性能、轻量的自动化工具,且它支持并发。
Taskr
将所有的执行任务都是协程,而所有任务执行的操作函数都是插件,你可以轻松扩展,自由组合任务。
npm install --save-dev taskr
入口文件
入口文件 taskfile.js
,同时加载插件(解析同级的package.json
文件中的taskr
依赖包作为插件)
taskfile.js
与package.json
路径可修改(最后的命令行配置)
- 默认只支持
es5
,支持es6
必须安装依赖库@taskr/esnext
taskr
任务起点 ( 什么是 task
任务 )
入口文件 taskfile
文件中所导出的每一个函数都是一个单独的任务,taskr
默认会执行 taskfile
文件中 default
导出的任务,然后安装 default
函数中安装 taskr
内置 API
(串行
|并行
)执行的插件顺序依次执行
taskfile.js
文件中名为default
的导出函数为执行启动函数,然后按照task.start | serial | parallel
规定的顺序依次执行
// 下面的代码会依次执行 开始default -> taskone -> taskTwo -> myplugin -> taskThree -> 结束 default
export default async function (taskr) {
await taskr.start("taskOne");
await taskr.start("taskTwo");
}
export async function taskOne(taskr) {
console.log("taskOne");
// .....
}
export async function taskTwo(taskr) {
console.log("taskTwo");
// 调用外部或本地新加插件
await taskr.myplugin().serial("taskThree");
// .....
}
export async function taskThree(taskr) {
console.log("taskThree");
// .....
}
什么是插件
taskr
将所有在任务中执行的非 API
之外的操作代码都视作插件 plugin
,因此,taskr
可以很方便的进行扩展,插件有三种类型
- 外部插件、本地插件:都通过
task.plugin
初始化,只是文件存放地方不一样 - 内联插件:通过
task.run
初始化
插件参数
所有的插件都支持 every
和 files
参数
// 插件是否遍历所有文件
options.every: default true
// 是否接受taskr的路径匹配规则
options.files: default true
外部插件与本地插件 ( task.plugin
的使用 )
外部插件与本地插件在定义与使用方法上都是一致的,唯一的区别是:外部插件的包放置于 npm
上(如:@task/next
),是公开的;本地插件的代码则在本地通过 package.json
或 options
的 taskr.requires
导入
// name: 插件名称
// pluginOptions: 插件配置信息
// (file, opt): file 当前文件信息 opt 插件的自定义传参
task.plugin(name, pluginOptions, (file, opt) => {
// ...
});
// 在myplugin.js文件中定义名为myplugin的插件
module.exports = function (task, utils) {
// promisify before running else repeats per execution
const render = utils.promisify(function () {});
// verbose API
task.plugin("myplugin", { every: false }, function* (files, opts) {
console.log("all my files: ", files); //=> Array
console.log(this._.files === files); //=> true
console.log(this instanceof Task); //=> true
console.log("user options: ", opts);
yield render(opts);
});
// or w/condensed API
task.plugin({
name: "myplugin",
every: false,
*func(files, opts) {
// ...same
},
});
};
// taskFour 是task,直接通过task.myplugin 链式调用即可
exports.taskFour = function* (task) {
yield task.source("src/*.js").myplugin({ foo: "bar" }).target("dist");
};
// 本地插件导入 package.json 示例
{
"taskr": {
"requires": [
"./build/custom-plugin-one.js",
"./build/custom-plugin-two.js"
]
}
}
// 实例化传参
const Taskr = require('taskr')
const taskr = new Taskr({
plugins: [
require('./build/custom-plugin-one.js'),
require('./build/custom-plugin-two.js'),
require('@taskr/clear')
{
name: 'plugThree',
every: false,
files: false,
*func(globs, opts) {
// nifty, eh?
}
}
]
});
内联插件 ( task.run
的使用)
内联插件是指通过 taskr.run
方法只使用一次的插件,如果需要多次使用,可以提升到本地或外部插件
// pluginOptions: 插件配置信息
// (file, opt): file 当前文件信息 opt 插件的自定义传参
task.run(pluginOptions, (file, opt) => {
// ...
});
// taskFIve 为taskfile中的task,在其中使用run执行的插件函数就是内联函数,只能执行一次,无法复用
exports.taskFIve = function* (task) {
yield task
.source("src/*.js")
.run({
every: false,
*func(files) {
Array.isArray(files); //=> true
yield Promise.resolve("this will run once.");
},
})
.target("dist");
};
主要 API
公共参数类型
{
task: string; // task 任务:一般为内部插件的名称,表示执行当前插件
tasks: task[]; // task数组
options: object; // 配置项
}
taskr 文件 API
task.source
(globs, [options]): 加载源文件task.target
(dirs, [options]):设置目标文件目录
Taskr 任务调度 API
主要执行
taskfile
注入的调度任务task
taskr.start
(task, [options]):执行 task 任务taskr.serial
(tasks, [options]):串行执行taskr.parallel
(tasks, [options]):并行执行
Taskr 插件 API
taskr.plugin
(name, pluginOptions, contentFn):创建本地或外部插件taskr.run
(pluginOptions, contentFn):创建内联插件
Taskr.root
:工作目录
Taskr.$
:内置的工具方法对象
Taskr._
:任务内部状态,来自 taskr.source
方法注入
CLI
命令
默认为当前路径(-d
),配置文件为taskfile.js
,默认串行(-m
)执行任务为导出为 default 的任务(task names
),可以通过 options
配置指定修改
taskr [options] <task names>
Usage: taskr [options] [tasks]
Options
-m --mode=MODE Run in 'parallel' or 'serial'. Default: 'serial'
-d --cwd=DIR Set Taskr's home directory. Default: '.'
-l --list Display all available tasks.
-v --version Display Taskr's version.
-h --help Display this help text.
Examples
taskr -d=/demo
taskr -m=parallel task1 task2
taskr --mode=serial task1 task2
相关库
- mri:node 命令行参数解析工具,类似极简化的 yargs
转载自:https://juejin.cn/post/6925070986069393421