connect middleware for requirejs optimizer
This module is just for development. Don't use in production. It's insanely inefficient to use in production.
the benefit using this middleware is quite simeple. Rather than doing like
<!-- use main-built.js in production -->
<!-- <script src='/javascripts/libs/require.js' data-main='/javascripts/main-built.js'></script> -->
<script src='/javascripts/libs/require.js' data-main='/javascripts/main.js'></script>Let's go simple with a single line of code
<script src='/javascripts/libs/require.js' data-main='/javascripts/main-built.js'></script>
The following code will listen ./public/javascripts/main-built.js
var connentRjs = require('connect-rjs');
app.use(connectRjs({
src: __dirname + '/public',
baseUrl: '/javascripts',
name: 'main'
}));
You can use minimatch to specify name.
app.use(connectRjs({
src: __dirname + '/public',
baseUrl: '/javascripts',
name: 'views/**/main'
}));
will match
- ./public/javascripts/views/home/main-built.js
- ./public/javascripts/views/about/main-built.js
- ./public/javascripts/views/tos/main-built.js
- ./public/javascripts/views/any_string/main-built.js
You can also pass Array of options.
app.use(connectRjs([
{
src: __dirname + '/public',
baseUrl: '/javascripts',
name: 'models/main'
},
{
src: __dirname + '/public',
baseUrl: '/javascripts',
name: 'views/**/main'
}
]));
Or, you can pass second argument as defaults option
app.use(connectRjs([
{ name: 'models/main' },
{ name: 'views/**/main' }
],{
src: __dirname + '/public',
baseUrl: '/javascripts'
}
));
Since this module is for development, the configure is like this in express app.
app.configure(function(){
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.cookieParser('fooo'));
app.use(express.session());
app.use(express.methodOverride());
});
app.configure('development', function(){
app.use(require('connect-rjs')([
{ name: 'model/main' },
{ name: 'collection/main }'
{ name: 'views/**/main }'
],{
baseUrl: '/javascripts'
src: __dirname + '/public'
}
));
app.configure(function(){
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
- all options are passing to
requirejs.optimizeunless it's connect-rjs specific options. For details r.js options optimize:noneby default. No uglify by default since this module is just for development.
suffix:-built.jsby defaults.src: required. In express application, it'll be__dirname + '/public';