Normal Programming Mistake
    Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »

    dependants-parserpublic

    dependants-parser

    Build Status Bitdeli Badge

    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.

    The problem

    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.

    Install

    npm install dependants-parser
    

    Test

    Test with Mocha by running

    npm test
    

    Simple usage

    Considering the following tree:

    .
    ├── index.js
    └── stylus
        ├── root.styl
        └── target.styl
    

    stylus/root.styl:

    @import 'target.styl'

    index.js:

    var dependants = require('dependants-tree');
     
    var out = dependants.findSync(
        'stylus/target.styl', // Target dependency
        'stylus', // Modules root
        dependants.patterns.stylus // Import expression regex
        );
     
    console.log(out);
    // [ 'abs/path/to/stylus/root.styl' ]

    Exports

    .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.

    .patterns

    Contains simple ready-to-use regexes for local import syntaxes

    • .stylus - @import 'module' Stylus syntax pattern
    • .commonjs - require('module') CommonJS syntax pattern
    • .jade - include module | extend module Jade syntax pattern

    Contribute

    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 test/regexes.js.

    Keywords

    none

    install

    npm i dependants-parser

    Downloadsweekly downloads

    14

    version

    0.0.5

    license

    none

    repository

    githubgithub

    last publish

    collaborators

    • avatar