old school - blocks CSS, Images, AND JS!
middle school - loads as non-blocking, but has multiple dependents
new school - loads as non-blocking, and ALL js files load asynchronously
// load jquery and plugin at the same time. name it 'bundle'// load your usage/*--- in my-jquery-plugin.js ---*/$script/*--- in my-app-that-uses-plugin.js ---*/$script
$script// create an id and callback inline$scriptvar dependencyList =foo: 'foo.js'bar: 'bar.js'thunk: 'thunkor.js' 'thunky.js'// wait for multiple depdendencies!$script// in my-awesome-plugin.js$script// in index.html$script
Optionally to make working with large projects easier, there is a path variable you can set to set as a base.
Note that this will include all scripts from here on out with the base path. If you wish to circumvent this for any single script, you can simply call
As of 2.5.5 it's possible to concat URL arguments (i.e. a query string) to the script path. This is especially useful when you're in need of a cachebuster and works as follows:
Please note that Squid, a popular proxy, doesn’t cache resources with a querystring. This hurts performance when multiple users behind a proxy cache request the same file – rather than using the cached version everybody would have to send a request to the origin server. So ideally, as Steve Souders points out, you should rev the filename itself.
Building a $script environment works like this:
npm install -devmake
You can add
$script to your existing ender build by adding it as such:
ender add scriptjs
Get access to it as such:
You can also require it as such:
var $S =
Are you using this library in production? Consider leaving a tip to show your appreciation.