Utility to recursively fetch dependant modules by parsing require syntaxes targeting a specified local module using a given a root directory and an import expression regex.
While writing a custom watch-build tool I needed some quick and easy way to figure out which modules depended on the file that changed would be emitted to in order to avoid re-compiling every file in the codebase at every change.
This tool is easily extensible to work with most pre-processors & syntaxes as long as their import command can be expressed with a regular expression and the modules are located relatively to the target file.
By now Stylus and CommonJS regexes are available by default in this module.
npm install dependants-parser
Test with Mocha by running
Considering the following tree:
. ├── index.js └── stylus ├── root.styl └── target.styl
var dependants = ;var out = dependants;console;// [ 'abs/path/to/stylus/root.styl' ]
.findSync(filepath, root, importRegex, [ match ])
Returns an array containing absolute paths of all modules that depend on
filepath found in
root, given an import expression syntax.
filepath(String) - Path to target module. This needs to be the real filename.
root- (String) Directory to recursively scan for dependants.
importRegex- (RegExp|Object) Import syntax expression. Used to parse out a file's dependency. You can also pass an object containing the keys 'exp' (RegExp) and 'offset' (number) of the result module string
[ match ]- (RegExp) Filename match expression. Use to filter files to scan.
Contains simple ready-to-use regexes for local import syntaxes
@import 'module'Stylus syntax pattern
require('module')CommonJS syntax pattern
include module | extend moduleJade syntax pattern
It would be great to provide import syntaxes for other languages / pre-processors (LESS, SASS, SCSS, Jade, Handlebars) this module could be used for.
Please feel free to drop a pull request if you're using this module with a custom expressions or improving the current ones / writing more tests.
Regexes are tested in