You are wrong, because r.js
does automatically resolve dependencies. If you have a main.js
file with this:
define(["foo"], function (foo) {
});
Then if you ask r.js
to create produce an optimized module out of main.js
, it will include the code for module foo
into the build.
Some caveats:
It is possible to tell r.js
to exclude modules. So if a module you think should be in an optimized bundle is absent, it may be that it has been excluded. (You know how you are using r.js
but if you use a bundle produced by someone else and you wonder, then this may be the answer: they specifically excluded a dependency from the build.)
r.js
does not find nested dependencies unless you tell it to. For instance:
define(function () {
require(["foo"], function (foo) {
});
});
r.js
won't find that foo
is required unless you set findNestedDepencencies
to true
in your build config.
r.js
can find only dependencies that are specified in the form of a list of string placed as a literal in the location where the require
and define
calls expect dependencies. So if you do:
define(function () {
var deps = ["foo"];
require(deps, function (foo) {
});
});
Then r.js
won't know that foo
is a dependency, because in require(deps, ...
your dependencies appear as a symbol reference, not as a list of strings. You would have to specify foo
as a dependency manually in the build configuration. There's no flag to turn on to make r.js
find these cases.
foo.js
into the package just because r.js finds adefine(["foo"], ...)
"? If the code is already there (foo
is defined), I don't see why you would want it to load thefoo.js
file. – Chaldean