export type SingleScript = string | (() => void | Promise<void>);
export interface IOptions {
// all default false
parallel?: boolean;
noWait?: boolean;
noRetrigger?: boolean;
}
export type Config = ['script', SingleScript | SingleScript[], IOptions];
const config1 = ['script', 'echo start'];
const config2 = ['script', ['rm -rf dist', 'mkdir dist']]; // multiple scripts
const config3 = ['script', ['rm -rf dist', 'rm -rf build'], { parallel: true }]; // with options
// no guarantee on script running orders , but less time-consuming probably
// be careful, shell scripts are not cross-platform
// you'd better perform file system operations with @nowa/module-file
const config4 = [
'script',
() => {
// js script
console.log('done');
},
];
consider this workflow
start
: [echo start
, <some time-consuming script>
]end
: [echo end
]the first-run output should be something like
<running time-consuming script>
<webpack related output>
and when you trigger a recompile (change source file), these are append to the output
<webpack recompile output>
with noWait
option on start
script, the first output should be
<running time-consuming script>
+ <webpack output>
the next module module-webpack
won't wait for the script to finish
with noRetrigger
option on end
script the recompile output should be
<webpack recompile output>
no 'end' output since it won't retrigger