Giter VIP home page Giter VIP logo

dependants-parser's Introduction

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-parser');

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.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.