fx43
v2.1.0
Published
Detecting changed files via caching file modification time
Downloads
46
Readme
fx43-node
Detecting changed files via caching file modification time.
Installation
# npm
npm install --save fx43
# yarn
yarn add fx43
Run tests:
# npm
npm test
# yarn
yarn test
Usage
Fx43 offers 3 ways to track files:
- All files mode: all files are tracked.
- Ignore file mode: like
.gitignore
, tracks files in respect to nested ignore files. - Custom mode: tracks files filtered by custom JavaScript functions.
All files mode
import { startAllFilesModeAsync } from 'fx43';
// ES5: const startAllFilesModeAsync = require('fx43').startAllFilesModeAsync;
startAllFilesModeAsync(
rootDirectory: string,
cacheDirectory: string,
ignoreCache: boolean = false,
): Promise<string[]>;
Ignore file mode
import { startIgnoreFileModeAsync } from 'fx43';
// ES5: const startIgnoreFileModeAsync = require('fx43').startIgnoreFileModeAsync;
startIgnoreFileModeAsync(
rootDirectory: string,
ignoreFiles: string[], // e.g. ['.myignore', '.gitignore']
cacheDirectory: string,
ignoreCache: boolean = false,
): Promise<string[]>;
Custom mode
import { startCustomModeAsync } from 'fx43';
// ES5: const startCustomModeAsync = require('fx43').startCustomModeAsync;
startCustomModeAsync(
rootDirectory: string,
cacheDirectory: string,
ignoreCache: boolean = false,
// use this to filter files
fileFilter: ((fileName: string) => boolean) | null = null,
// use this to filter directories
dirFilter: ((dirName: string) => boolean) | null = null,
): Promise<string[]>;
Example
Suppose you have some files in a directory named data
:
- data/
index.html
main.js
style.css
lib/
lib.js
You need to track all changed .js
files. In this case, you can use ignore file mode. Define an ignore file like .gitignore
, for example, .myignore
with the following contents:
# .myignore
# put this file to the root folder of the project
# ignore html and css files
*.html
*.css
Then call fx43 APIs like this:
import { startIgnoreFileModeAsync } from 'fx43';
async function printChangedFiles() {
const files = await startIgnoreFileModeAsync('./data', ['.myignore'], './.cache');
console.log(`${files.length} file(s) changed.\n${files}`);
}
(async () => {
await printChangedFiles();
})();
# run the program
node example.js
# output
2 file(s) changed.
main.js
lib/lib.js
# run the program
node example.js
# output
0 file(s) changed.
# modify and create some files
touch ./data/lib/lib.js
touch ./data/new.js
# run the program
node example.js
# output
2 file(s) changed.
lib/lib.js
new.js
# modify an irrelevant file
touch ./data/style.css
# run the program
node example.js
# output
0 file(s) changed.
For more examples, see examples.