I'd like the ability to have single-instance, page-wide libraries like jQ/Zepto or Underscore/lodash available with their standard global vars ($, _) for every module to use without having to explicitly type in their deps in every define
call (see not-so-dry.js).
How I handle this currently is by using separate script tags for the global libs before the tag for RequireJS, leaving them out of the RequireJS system entirely. While this solution works, it adds sync loading/execution requirements handled by the order of the markup.
While some modules wouldn't need DOM methods, thus not having jQ/Zepto/etc as a dep, I don't see much benefit to my web app(s) being able to load those modules first, then jQ/Zepto/etc, then the view/template modules that do the on-screen work.
What about if I were to define the non-AMD version of these libs in a shim block (AFAIK, that should still "pollute" the global namespace), and then reference them as deps in the main require block? Would that ensure that these libs would be loaded and executed before the other modules? See shim-main.js.
I would probably have the config.js do the common lib loading, and then load "main" which would load your app modules after that, and not use deps:
Note though if all your modules need access to jquery, backbone and zepto to do their job, then the module responsibility may be too large. It also means it is harder to reuse those modules in another project without knowing of these implicit dependencies and loading them first.
All that said though, the above approach is perfectly fine to use.