Scott Stafford
Scott Stafford

Reputation: 44786

One Backbone.js app using require.js depends on another: how do I include the child?

I wrote a backbone.js app that uses require.js and is broken up with models/, collections/ and so forth. I then wrote another app that depends on the first app (and some other things. The files are laid out like so:

/scripts/appA/
             models/
             collections/
             views/
/scripts/appNeedsA/
             models/
             collections/
             views/

What do I put in the needsA to require appA? The below seems logical to me but doesn't work. If I use ../../appA, that finds appA but IT's dependencies can't be found because the root is wrong.

define(
  ['underscore', 'backbone', '../appA'],
  function (_, Backbone, appA) {
     ...
  }

Upvotes: 1

Views: 210

Answers (2)

Scott Stafford
Scott Stafford

Reputation: 44786

The proper solution is to:

define(
  ['underscore', 'backbone', 'appA/views/whatever'],
  function (_, Backbone, appAWhateverView) {
     ...
 }

and to set your require.config paths to include:

require.config({
    paths: {
         appA: '../appA'
    }
});

Upvotes: 0

busticated
busticated

Reputation: 2187

It might not be the answer you were hoping for but, here's one approach:

https://github.com/busticated/RequireLoadingExample

The idea is that you define your module deps using the path the consuming application will use, then in the consumed app you alias the path appropriately.

In my example, I have a top-level main.js file which pulls in both app1.js and app2.js modules. Both of these modules depend on modules within their own sub-directories - e.g. app1.js uses one/mods/a.js and one/mods/b.js. I have another main (main-one.js) file that lives a level down inside the one/ directory. This file calls:

require.config({
    paths: {
        'jquery': 'libs/jquery',
        'one': '.'
    }
});

So now when app1.js loads, the one/mods/a.js path is translated to ./mods/a.js and is found / loaded without issue.

You should be able to fork my repo above and load index.html & one.html in a browser with js console open to see it all work.

Hope it helps!

Upvotes: 2

Related Questions