Task processor
Runner for background and cli tasks with SASS/CommonJS bundlers using native multithreading
How to install
npm i -D @n1k1t/task-processor
or
yarn add -D @n1k1t/task-processor
Do first steps
How to: - Create
.js
executable file for tasks - Register task
const { registerCliTasks } = require('@n1k1t/task-processor');
/*
Tasks which you are going to use from command line should be registered
with the "registerCliTasks" function
*/
registerCliTasks([
{
name: 'greeting',
use: [
{ processor: 'middleware', fn: () => console.log('Hi there!') }
]
}
]);
- Run it from console
node #your script
- Type
greeting
in the console - Check the message from middleware "Hi there!" in the console
- Done!
Methods
...comming soon
Processors
...comming soon
Watch and bundle of SASS
How to: const { registerBackgroundTasks } = require('@n1k1t/task-processor');
/*
The "registerBackgroundTasks" with the "watch" option is for tasks
which should watch some files for change and run automatically
*/
registerBackgroundTasks([
{
name: 'css',
watch: { match: 'path/to/src/*.scss', ignore: ['_*.scss'] },
use: [
{ processor: 'sass-bundle' },
{ processor: 'write-files', dir: 'path/to/dest' }
]
}
]);
Use Livereload for the dynamic injection of CSS/Image
How to: - First, you need to install a livereload plugin for your browser. Here is the Plugin for Google Chrome
- Turn on the livereload plugin on the page which using bundled
sass
files - Write some code
const { registerBackgroundTasks, useLivereload } = require('@n1k1t/task-processor');
/*
The "useLivereload" creates a web socket server for integration with browser
If you already have another process with the same server then
it creates the client which will integrate with the first one
*/
useLivereload();
registerBackgroundTasks([
{
name: 'css',
watch: { match: 'path/to/src/*.scss', ignore: ['_*.scss'] },
use: [
{ processor: 'sass-bundle' },
{ processor: 'write-files', dir: 'path/to/dest' },
{ processor: 'livereload', type: 'inject' }
]
}
]);
Create/resize/convert images
How to: There you can find the Sharp opportunities
const { registerCliTasks, useLivereload } = require('@n1k1t/task-processor');
useLivereload();
registerCliTasks([
{
name: 'create-picture',
use: [
{
processor: 'sharp',
create: {
width: 48,
height: 48,
channels: 4,
background: { r: 255, g: 0, b: 0, alpha: 0.5 }
},
pipeline: sharp => sharp.png()
},
{ processor: 'write-files', dir: 'test/dest', name: 'result' },
{ processor: 'livereload', type: 'inject' }
]
}
]);
Bundle Common JS
How to: const { registerBackgroundTasks } = require('@n1k1t/task-processor');
registerBackgroundTasks([
{
name: 'js',
watch: 'path/to/src/app.js',
use: [
{ processor: 'commonjs-bundle' },
{ processor: 'write-files', dir: 'path/to/dest' }
]
}
]);
Bundle of several SASS files with multithreading
How to: const { registerCliTasks, useThreads } = require('@n1k1t/task-processor');
/*
NOTE!!!
The "useThreads" function creates workers each CPUs count in your system
The "execPath" argument should contain the path to module where tasks
are registred.
It's important because workers have different processes. And that's
not possible to forward functions with some lexical environment or
closure to another process
*/
useThreads({ execPath: module.filename });
registerCliTasks([
{
name: 'css',
description: 'This task gets all SASS files in "path/to/src" and bundles they to "path/to/dest"',
add: { path: 'path/to/src/*.scss', ignore: ['_*.scss'] },
use: [
{ processor: 'sass-bundle' },
{ processor: 'write-files', dir: 'path/to/dest' }
]
}
]);
Watch for several files change but bundle only one
How to: const { registerBackgroundTasks, useLivereload } = require('@n1k1t/task-processor');
useLivereload();
registerBackgroundTasks([
{
name: 'js',
watch: {
match: 'path/to/src/**/*.js',
triggerOnly: true // This option wont pass changed file to the task context
},
use: [
{ processor: 'get-files', path: 'path/to/main/file.js' },
{ processor: 'commonjs-bundle' },
{ processor: 'write-files', dir: 'path/to/dest', name: 'app' },
{
processor: 'livereload',
type: 'reload' // Use type with "reload" for the page refreshing
}
]
}
]);
TODO
- Add plugins support