UNPKG

browserify-alias-grunt

Version:

Map paths to JS files and directories for use as aliases so that modules can be require'd without messy relative file paths.

142 lines (104 loc) 3.43 kB
# browserify-alias-grunt Map paths to JS files and directories for use as aliases so that modules can be require'd without messy relative file paths. ## Why use aliases? You want to require modules from specific directories, without needing to use `../../../../some-module` to resolve relative paths. For example, have a look at the following javascript directory structure: ``` root project directory │ ├──•Gruntfile.js │ └───src │ └───js │ └───app │ ├──• app.js │ ├───controller │ │ │ └──sunshine │ │ │ └──• sunshine-controller.js │ └───model │ └──sunshine │ └──• sunshine-model.js ``` Now, say we want to `require` *sunshine-model* from within the *sunshine-controller* module. The standard old crappy way to do this is: ```javascript require("../../../model/sunshine/sunshine-model"); ``` Now imagine that you refactor your code and modules get moved around. Suddenly, managing all those relative paths becomes even more of a pain in the butt. Using *browserify-alias-grunt* at compile-time will allow you to `require` modules from the aliased directories you specify. New hotness: ```javascript require("model/sunshine/sunshine-model"); ``` ## Usage ### Installation ``` npm install --save-dev browserify-alias-grunt ``` ### Implementation Simply specify the files and directories you want to map by using a globbing pattern. Here is a very basic Gruntfile as an example: ```javascript function Gruntfile (grunt) { "use strict"; var alias = require("browserify-alias-grunt"); grunt.initConfig({ browserify: { options : { alias: alias.map(grunt, { // alias all js files in the 'app' directory cwd: "src/js/app", src: ["**/*.js"], dest: "" }) }, src: "src/js/app/app.js", dest: "dist/js/app.js", }, }); grunt.loadNpmTasks("grunt-browserify"); grunt.registerTask("default", ["browserify"]); } module.exports = Gruntfile; ``` It is also possible to specify multiple targets using an array of objects: ```javascript function Gruntfile (grunt) { "use strict"; var alias = require("browserify-alias-grunt"); grunt.initConfig({ browserify: { options : { alias: alias.map(grunt, [ { // alias app files cwd: "src/js/app", src: ["**/*.js"], dest: "" }, { // alias lib files cwd: "src/js/libs", src: ["**/*.js"], dest: "" } ]) }, src: "src/js/app/app.js", dest: "dist/js/app.js", }, }); grunt.loadNpmTasks("grunt-browserify"); grunt.registerTask("default", ["browserify"]); } module.exports = Gruntfile; ```