Awesome
<div align="center"> <img src="/logo.png" alt="Taskr" width="128"> </div> <h1 align="center">Taskr</h1> <div align="center"> <a href="https://npmjs.org/package/taskr"> <img src="https://img.shields.io/npm/v/taskr.svg" alt="NPM Version"/> </a> <a href="https://travis-ci.org/lukeed/taskr"> <img src="https://img.shields.io/travis/lukeed/taskr.svg" alt="TravisCI"/> </a> <!-- <a href="https://codecov.io/github/lukeed/taskr"> --> <!-- <img src="https://img.shields.io/codecov/c/github/lukeed/taskr/master.svg" alt="Test Coverage"/> --> <!-- </a> --> <a href="https://ci.appveyor.com/project/lukeed/taskr/branch/master"> <img src="https://ci.appveyor.com/api/projects/status/jjw7gor0edirylu5/branch/master?svg=true" alt="AppVeyor"/> </a> <a href="https://npmjs.org/package/taskr"> <img src="https://img.shields.io/npm/dm/taskr.svg" alt="NPM Downloads"/> </a> </div> <div align="center">A fast, concurrency-focused task runner.</div> <div align="center"><strong>Fasten your seatbelt. :rocket:</strong></div> <br />Taskr is a highly performant task runner, much like Gulp or Grunt, but written with concurrency in mind. With Taskr, everything is a coroutine, which allows for cascading and composable tasks; but unlike Gulp, it's not limited to the stream metaphor.
Taskr is extremely extensible, so anything can be a task. Our core system will accept whatever you throw at it, resulting in a modular system of reusable plugins and tasks, connected by a declarative taskfile.js
that's easy to read.
const src = 'src/{admin,client}';
const dist = 'build';
module.exports = {
*lint(task) {
yield task.source(`${src}/*.js`).xo({ esnext:true });
},
*scripts(task) {
yield task.source(`${src}/*.js`).babel({ presets:['es2015'] }).target(`${dist}/js`);
},
*styles(task) {
yield task.source(`${src}/*.sass`).sass().autoprefixer().target(`${dist}/css`);
},
*build(task) {
yield task.parallel(['lint', 'scripts', 'styles']);
}
}
History
TL;DR This is the continuation of and successor to Fly!
Fly's original author, Jorge Bucaran, has shifted focus to other exciting projects. Before leaving, he chose to guarantee Fly's future by transferring the project to Luke Edwards, who was one of the first and most enthused contributors.
To reflect this milestone, Fly has been renamed to Taskr and has a stable, exciting future ahead! :tada:
For existing Fly users, taskr@1.0.x
is equivalent to fly@2.0.6
-- with a few exceptions:
- The
flyfile.js
has been renamed totaskfile.js
; - The
fly
key insidepackage.json
has been renamed totaskr
. (See Local Plugins)
At this point, the Fly & Taskr ecosystems are fully interchangeable, which means that you can install taskr
and use any fly-*
or taskr-*
plugins of your choosing. That said, most plugins have already been ported over to the new namespace!
Lastly, Taskr will maintain a list of official plugins. Don't forget to check 'em out!
Core Features
- lightweight: with
6
dependencies, installation takes seconds - minimal API: Taskr only exposes a couple methods, but they're everything you'll ever need
- performant: because of Bluebird, creating and running Tasks are quick and inexpensive
- cascadable: sequential Task chains can cascade their return values, becoming the next Task's argument
- asynchronous: concurrent Task chains run without side effects & can be
yield
ed consistently - composable: chain APIs and Tasks directly; say goodbye to
pipe()
x 100! - modular: easily share or export individual Tasks or Plugins for later use
- stable: requires Node
>= 4.6
to run (LTS is6.11
)
Docs
The main documentation can be found in taskr
, our core package.
Each @taskr/*
or taskr-*
plugin will also include its own documentation, too!
Packages
The Taskr repo is managed as a monorepo that is composed of its many official packages.
Important: The core package is
taskr
and must be installed before using any additional plugins.
Official Packages
These npm packages are officially released and maintained by the Taskr team.
If you can't find what you need, be sure to check out the community list or browse for all taskr-related plugins on npmjs.com
, too!
If you're still missing something, open a ticket so that the team & community can try to help you... or create & share your own Taskr plugin! We have an awesome Yeoman generator to help speed up the process.
Package | Version | Dependencies | Description |
---|---|---|---|
taskr | Core package. Required | ||
@taskr/babel | Babel plugin for Taskr | ||
@taskr/browserify | Browserify plugin for Taskr | ||
@taskr/buble | Bublé plugin for Taskr | ||
@taskr/clear | Remove one or more directories | ||
@taskr/coffee | CoffeeScript plugin for Taskr | ||
@taskr/concat | Concatenate files with optional source maps. | ||
@taskr/esnext | Allows async /await syntax within taskfile.js | ||
@taskr/flatten | Flatten source files to a max of sub-dirs. | ||
@taskr/gzip | Gzip plugin for Taskr | ||
@taskr/htmlmin | Minify HTML with Taskr | ||
@taskr/jest | Jest plugin for Taskr | ||
@taskr/less | Compile LESS to CSS with Taskr | ||
@taskr/postcss | PostCSS plugin for Taskr | ||
@taskr/prettier | Prettier plugin for Taskr | ||
@taskr/rev | Version/Hash assets for cache-busting | ||
@taskr/sass | Compile SASS to CSS with Taskr | ||
@taskr/shell | Execute shell commands with Taskr | ||
@taskr/stylus | Compile Stylus to CSS with Taskr | ||
@taskr/typescript | Compile Typescript with Taskr | ||
@taskr/uglify | UglifyJS plugin for Taskr | ||
@taskr/unflow | Remove Flow type annotations with Taskr | ||
@taskr/watch | Watch files & Execute specified tasks on change | ||
@taskr/zip | ZIP compress files with Taskr | ||
generator-taskr | Official Yeoman generator |
Community Plugins
Package | Version | Dependencies | Description |
---|---|---|---|
taskr-autoprefixer | CSS Autoprefixer plugin for Taskr | ||
taskr-nunjucks | Render Nunjucks templates with Taskr | ||
taskr-precache | Cache assets for offline use via service worker | ||
taskr-svelte | Compile Svelte components with Taskr | ||
taskr-xo | XO plugin for Taskr | ||
taskr-standard | Standard plugin for Taskr | ||
template-taskr | Unofficial SAO generator |
License
MIT © Luke Edwards and Jorge Bucaran
<!-- [`@taskr/eslint`](/packages/eslint) | [![npm](https://img.shields.io/npm/v/@taskr/eslint.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/eslint) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/eslint)](https://david-dm.org/lukeed/taskr?path=packages/eslint) [`@taskr/flow`](/packages/flow) | [![npm](https://img.shields.io/npm/v/@taskr/flow.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/flow) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/flow)](https://david-dm.org/lukeed/taskr?path=packages/flow) [`@taskr/rollup`](/packages/rollup) | [![npm](https://img.shields.io/npm/v/@taskr/rollup.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/rollup) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/rollup)](https://david-dm.org/lukeed/taskr?path=packages/rollup) [`@taskr/webpack`](/packages/webpack) | [![npm](https://img.shields.io/npm/v/@taskr/webpack.svg?maxAge=86400)](https://www.npmjs.com/package/@taskr/webpack) | [![Dependency Status](https://david-dm.org/lukeed/taskr.svg?path=packages/webpack)](https://david-dm.org/lukeed/taskr?path=packages/webpack) | -->