Giter Club home page Giter Club logo

remapify's Introduction

Remapify

NPM Build Status

A Browserify plugin to map whole directories as different directories to browserify. This is useful if you have a common batch of files that you don't want to have to refer to relatively all the time.

Why

Suppose you've got an app structure that looks like

app
  - views
    - home
      index.js
    - people
      index.js
      _avatar.js
      _description.js
  - models
    person.js
// _avatar.js
  // this gets really old after a while, and is prone to breaking if you change the directory hiearchy.
  var person = require('../../models/person.js')
  // This is much better
  var person = require('models/person.js')

Usage

var browserify = require('browserify')
  , remapify = require('remapify')
  , b = browserify(__dirname)

b.plugin(remapify, [
  {
    src: './client/views/**/*.js' // glob for the files to remap
    , expose: 'views' // this will expose `__dirname + /client/views/home.js` as `views/home.js`
    , cwd: __dirname // defaults to process.cwd()
    , filter: function(alias, dirname, basename) { // customize file names
      return path.join(dirname, basename.replace('foo', 'bar'))
    }
  }
])

b.bundle()

options [{}]

Array of objects. Each object is one remapping.

src

Glob pattern to find the files to remap.

expose

Replace the cwd of each file in src with this value.

cwd (optional)

Specify the 'current working directory' for the glob pattern to start from and for the expose option to replace.

filter (optional)

Alter the file name on the fly. For example, if you wanted to require _avatar.js as require('avatar') you could do:

var path = require('path')
b.plugin(remapify, [
  {
    src: './**/*.js'
    , filter: function(alias, dirname, basename) {
      return path.join(dirname, basename.replace(/^\_(.*)\.js$/, '$1'))
    }
  }
]);

glob options

All options specified by the glob module can be used as well.

events

Remapify will emit events while processing. This is implemented to make testing easier, but… maybe it'll be useful for other things. The events are emitted on the bundle.

b.on('remapify:file', function(file, expandedAliases, globber, pattern){})

Emitted when the globbing finds a file to remap.

  • file The path to the file
  • expandedAliases The list of files and what they will be exposed as as found so far. Includes this file.
  • globber The full glob instance.
  • pattern The glob pattern in use.

b.on('remapify:files', function(file, expandedAliases, globber, pattern){})

Emitted when all files have been found to be remapped.

The arguments are the same as above.

Tests

All tests are mocha. You can run them with either npm test or mocha test.

Development

  • TDD with nodemon -x npm -- test
  • Release with npm run release
  • Releasing runs jscs and jshint. You can manually run with npm run lint

Changelog

See CHANGELOG.md

remapify's People

Contributors

joeybaker avatar lo1tuma avatar mrkm4ntr avatar zachwolf avatar zeevl avatar

Watchers

 avatar

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.