• This repository has been archived on 26/Mar/2018
  • Stars
    star
    376
  • Rank 109,578 (Top 3 %)
  • Language
    JavaScript
  • Created over 11 years ago
  • Updated about 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

[DEPRECATED] Automagically wire-up installed Bower components into your RequireJS config

bower-requirejs Build Status

Automagically wire-up installed Bower components into your RequireJS config

Install

$ npm install --save bower-requirejs

Usage

./node_modules/.bin/bower-requirejs -c path/to/config.js -e underscore -e jquery

Options

-h, --help              # Print options and usage
-v, --version           # Print the version number
-c, --config            # Path to your RequireJS config file
-e, --exclude           # Name of a dependency to be excluded from the process
-b, --base-url          # Path which all dependencies will be relative to
-t, --transitive        # Process transitive dependencies
-s, --shim              # Shim dependencies
-d, --exclude-dev       # Exclude devDependencies

Using Bower Hooks

Bower >=v1.3.1 includes hooks for preinstall, postinstall and preuninstall actions. To run grunt-bower-requirejs after every bower install, add a scripts block to your .bowerrc.

{
  "scripts": {
    "postinstall": "bower-requirejs -c path/to/config.js"
  }
}

Things to remember

Config file

If you do not already have a config.js file at the location specified by the --config option then one will be generated for you. A basic config.js file looks like this:

require.config({
  shim: {},
  paths: {}
});

You still need to create a path for your js files. This tool will only create paths for third party libraries specified in bower.json.

require.config({
  shim: {},
  paths: {
    myComponent: 'js/myComponent.js'  // make sure to add your components!
  }
});

The tool does not overwrite the config file, it just adds additional paths to it. So paths you add will be preserved. Keep in mind that if you change or remove one of your Bower dependencies after you've run the task, that path will still exist in the config file and you'll need to manually remove it.

Transitive option

If the transitive option is set to true, then transitive dependencies will be also added to the require config.

For example, say we explicitly have an entry in our bower config for module myTotallyCoolModule, which depends on jQuery and underscore. If the transitive option is set to true, there will be config entries for myTotallyCoolModule, jQuery, and underscore. Otherwise, if the transitive option is set to false, there will only be a config entry for myTotallyCoolModule.

Each transitive dependency is only included once, even if the dependency is used multiple times.

exclude-dev option

If the exclude-dev option is set to true, then dev-dependencies will not be added to the require config.

RequireJS component

Package Support

If a dependency's moduleType is set to node in bower.json it will be treated as a CommonJS Package.

The following bower.json file:

{
  "name": "node-module-type-stub",
  "version": "0.0.1",
  "moduleType": ["node"],
  "main": "myMain.js"
}

Will generate this entry in your config.js file:

require.config({
  shim: {},
  packages: [
    {
      name: 'node-module-type-stub',
      main: 'myMain.js'
    }
  ],
  paths: {}
});

Overriding the main file of a dependency

You can override the main file of a given dependency by specifying the overrides.{dependency}.main property in your bower.json file:

{  
  "overrides": {
     "jquery": {
       "main": "jquery.min.js"
     },
     "anima": {
       "main": "anima.min.js"
     }
   }
 }

The file path is relative to the dependency folder

Programmatic API

bowerRequireJS(options, callback)

  • options β€” An options object containing optional config, baseUrl, and exclude options. The config option specifies an output file to which the generated require.js config will be written. If a require.js config file already exists at this location, the generated config will be merged into this file.
  • callback β€” A callback to execute when the task is finished. This callback will receive an object that contains the require.js configuration generated from bower components. Note that this includes only config elements representing bower components.

You can use bower-requirejs directly in your app if you prefer to not rely on the binary.

var bowerRequireJS = require('bower-requirejs');

var options = {
  config: 'scripts/config.js',
  exclude: ['underscore', 'jquery'],
  transitive: true
};

bowerRequireJS(options, function (rjsConfigFromBower) {
  // all done!
});

parse(pkg, name, baseUrl)

  • pkg β€” A package object returned from bower list
  • name β€” The name of the package
  • baseUrl β€” A baseUrl to use when generating the path

If you would like to just receive a paths object you can do so with the parse module. If your package does not contain a bower.json file, or if the bower.json does not contain a main attribute then the parse module will try to use the primary module to find a primary, top-level js file.

var bower = require('bower');
var _ = require('lodash');
var parse = require('bower-requirejs/lib/parse');

var baseUrl = './';

bower.commands.list()
  .on('end', function (data) {
    _.forOwn(data.dependencies, function (pkg, name) {
      if (name == 'jquery') {
        var pathObj = parse(pkg, name, baseUrl);
      }
    });
  });

primary(name, canonicalDir, opts)

  • name β€” The package name
  • canonicalDir β€” The canonicalDir for the package, either returned by bower list or passed in manually
  • opts β€” Use the opts.extraSearchDirs to specify other dirs to search, relative to the canonicalDir. By default this is ['dist'].

If you just want to look for the js file in a bower component's top-level directory or 'dist' directory you can use the primary module. The primary module will exclude gruntfiles and min.js files. It will also check if package.json specifies a main js file.

var primary = require('bower-requirejs/lib/primary');

var name = 'backbone';
var dep = { canonicalDir: './bower_components/backbone' };

var primaryJS = primary(name, dep);
// returns backbone.js

buildConfig(bowerDependencyGraph, options)

  • bowerDependencyGraph β€” A bower dependency graph, as returned by a call to bower.commands.list
  • options β€” An object containing baseUrl, exclude, and transitive options, as described above.

This module can be used to generate a requireJs config elements from bower components.

var buildConfig = require('bower-requirejs/lib/build-config');

bower.commands.list({})
.on('end', function (dependencyGraph) {
  var configElementsFromBower = buildConfig(dependencyGraph, {
    baseUrl : '/some/base/url',
    exclude: ['underscore', 'jquery'],
    transitive: true
  });
});

Credit

Sindre Sorhus Rob Dodson
Sindre Sorhus (creator) Rob Dodson (maintainer)

License

BSD license and copyright Google

More Repositories

1

yeoman

Yeoman - a set of tools for automating development workflow
10,050
star
2

generator-angular

Yeoman generator for AngularJS
JavaScript
5,741
star
3

yo

CLI tool for running Yeoman generators
JavaScript
3,787
star
4

generator-webapp

A gulp.js generator for modern webapps
JavaScript
3,775
star
5

generator-chrome-extension

Scaffold out a Chrome extension
JavaScript
2,598
star
6

update-notifier

Update notifications for your CLI app
JavaScript
1,748
star
7

grunt-usemin

[UNMAINTAINED] Replaces references to non-optimized scripts or stylesheets into a set of HTML files (or any templates/views)
JavaScript
1,221
star
8

generator-generator

Generate a Yeoman generator
JavaScript
1,216
star
9

generator

Rails-inspired generator system that provides scaffolding for your apps
TypeScript
1,179
star
10

yeoman-app

A desktop app that scaffolds projects using Yeoman
JavaScript
989
star
11

generator-webapp_DEPRECATED

Yeoman generator that scaffolds out a front-end web app
JavaScript
978
star
12

generator-polymer

Scaffold out a Polymer project
JavaScript
929
star
13

generator-mobile

Scaffold out a mobile project based on Web Starter Kit
JavaScript
919
star
14

configstore

Easily load and persist config without having to think about where and how
JavaScript
860
star
15

yeoman.io

Yeoman website
CSS
791
star
16

generator-backbone

Scaffold out a Backbone.js project
JavaScript
638
star
17

generator-node

Create a Node.js module
JavaScript
578
star
18

insight

Node.js module to help you understand how your tool is being used by anonymously reporting usage metrics to Google Analytics
JavaScript
554
star
19

generator-chromeapp

Scaffold out a Chrome app
JavaScript
310
star
20

stringify-object

Stringify an object/array like JSON.stringify just without all the double-quotes
JavaScript
305
star
21

grunt-filerev

[DEPRECATED] File revving
JavaScript
260
star
22

yosay

Tell Yeoman what to say
JavaScript
207
star
23

grunt-bower-requirejs

[DEPRECATED] Grunt task - Automagically wire-up installed Bower components into your RequireJS config
JavaScript
199
star
24

generator-bootstrap

Yeoman generator for Bootstrap
JavaScript
187
star
25

generator-karma

Yeoman generator for Karma
JavaScript
173
star
26

environment

Yeoman runtime environment
JavaScript
125
star
27

generator-jquery

Generate a jQuery plugin
JavaScript
85
star
28

generator-gruntfile

Create a basic Gruntfile with yo.
JavaScript
74
star
29

doctor

Detect potential issues with users system that could prevent Yeoman from working correctly
JavaScript
62
star
30

yeoman-assert

Assert utility from yeoman
JavaScript
53
star
31

yeoman-generator-list

JavaScript
52
star
32

yeoman-test

Test utilities for Yeoman generators
TypeScript
43
star
33

generator-mocha

Yeoman generator for Mocha
JavaScript
42
star
34

generator-gruntplugin

Create a gruntplugin module with yo, including Nodeunit unit tests.
JavaScript
35
star
35

generator-jasmine

Yeoman generator for Jasmine
JavaScript
34
star
36

yeoman-character

The Yeoman character in your CLI. Like wat.
JavaScript
21
star
37

yeoman-welcome

Yeoman welcome message used in generators
JavaScript
19
star
38

media

Yeoman logo and artwork
16
star
39

generator-commonjs

Generate a CommonJS module
JavaScript
16
star
40

insight-dashboard

[DEPRECATED] Insight into Yeoman
CSS
11
star
41

Hackathons

Running a Yeoman hackathon? Start here for ideas, tips, and goals
10
star
42

html-wiring

[DEPRECATED] Set of utilities to update HTML files
JavaScript
10
star
43

cli-list

Parse comma-separated argument lists.
JavaScript
9
star
44

yeoman-remote

Fetch packages and archives from remote resources with cache support
JavaScript
8
star
45

generator-dummytest

JavaScript
3
star
46

generator-dummy

Dummy generator used for unit testing purpose
JavaScript
2
star
47

yeoman-api

TypeScript
1
star