Single responsibility (SRP)
Open Close (OCP)
Liskov substitution principle (LSP)
Interface segregation principle (ISP)
Dependency inversion principle (DIP)
Well if you are SharePoint developer then you'll argue that why we need another framework for loading individual module which is already provided by SharePoint via SP.SOD (Script on Demand).
A quick comparison between both approaches
|Require JS||SOD (Script On Demand)|
|Highly Configurable||No Configurations|
|Support to External Libraries||No Exports for External Libraries|
|Inject, Exports, Shim||No exports or injection support (natively loads the plugin)|
|Cleaner Dependency construct and resolution||Complex construct to write dependencies within external libraries|
I won't go in detail of how to setup require.js the documentation is itself self-explanatory trust me It took me a while to get this up but now it's a piece of cake !!!
I'll talk about some important part of the configuration which is required so that a SharePoint developer can leverage functionality and get benefitted from best of both worlds
The key aspect in require.js is configuration which is very powerful important attribute
Above is my simple configuration for require.js
Please focus on deps and paths property
#1 Paths : The SharePoint JSOM runtime and main js to be loaded.
#2 Deps : Deps setting causes the runtime and sp.js file to be loaded before any module is loaded, thus making required core and necessary classes available for developer to program.
The ModuleI've created two module which fetches the current user display name from web and user profile
// Module for Web
// Module for User Profile
User Profile Code : http://www.vrdmn.com/2013/02/sharepoint-2013-working-with-user.html @
The Start-up Module
SP.SOD.loadMultiple(['sp.js', 'userprofile'], ShowUserName);
#1 The responsibility of ensuring that sp.js and sp.userprofile.js has been loaded is delegated to native SharePoint SOD module, the trick is to use SP.SOD.loadMultiple() which loads multiple modules and triggers the final function to be loaded.
Note: Here you can see the difference in the way require.js works and SOD works, require.js injects the dependencies as a parameters and SOD doesn't which gives more clear understanding of what to expect.
I've already published the sample at github: https://github.com/akhileshnirapure/sp_hosted_app_requirejs
Feel free to fork and if you have any question the reach me at Twitter: @AkhileshN