u.each(self.scripts, function(script) { if (filterRe.test(script.route)) return; var out = fspath.join(output.path, script.route); var ws = fs.createOutputStream(out); ws.on('finish', function() { log('output script: %s', out); }); ws.on('error', log); // from browserify-middleware index.js (may need to do noParse map also) var options = browserify.settings.normalize(script.opts); var bundler = browserify.buildBundle(script.path, options); if (!opts.dbg) { bundler.plugin(require.resolve('minifyify'), { map:false } ); } bundler.bundle().pipe(ws); });
var app = express(); app.locals.asset = function (path) { return '/static/' + version + path } app.set('view engine', 'jade'); app.set('views', __dirname + '/views'); app.use(express.favicon(join(__dirname, 'favicon.ico'))); app.use(function (req, res, next) { res.locals.path = req.path next() }) app.use('/static/' + version, express.static(join(__dirname, 'static'), { maxAge: !process.env.NODE_ENV || process.env.NODE_ENV === 'development' ? 0 : ms('12 months') })); browserify.settings.production('cache', '12 months'); app.get('/static/' + version + '/client/listing.js', browserify('./client/listing.js')); app.get('/static/' + version + '/client/topic.js', browserify('./client/topic.js')); app.get('/static/' + version + '/client/edit.js', browserify('./client/edit.js')); app.get('/static/' + version + '/client/login.js', browserify('./client/login.js')); if (!process.env.NODE_ENV || process.env.NODE_ENV === 'development') app.use(express.logger('dev')); app.get('/', function (req, res) { res.render('home', {}); }); app.get('/robots.txt', function (req, res) { res.end('User-agent: *\nDisallow: /source'); });
// Load required modules const http = require('http') const express = require('express') const path = require('path') const browserify = require('browserify-middleware') const app = express() browserify.settings.development('basedir', __dirname) app.get('/js/main.js', browserify('./client/main.js')) app.use(express.static(path.join(__dirname, '/public/'))) var webServer = http.createServer(app) webServer.listen(process.env.PORT, function () { // Callback triggered when server is successfully listening. Hurray! console.log('Server listening on: http://localhost:%s', process.env.PORT) })
app.use(stylus.middleware({ src: __dirname + '/site', compile: function(str, sourcePath) { return stylus(str) .set('filename', sourcePath) .set('compress', false) .use(nib()); } })); app.get('/', function(req, res) { res.redirect(req.uri.pathname + 'room/main/'); }); browserify.settings.development('debug', true); // force development mode for browserify given this is a demo browserify.settings('mode', 'development'); // serve the rest statically app.use(browserify('./site')); app.use(express.static(__dirname + '/site')); // we need to expose the primus library app.get('/rtc.io/primus.js', switchboard.library()); app.get('/room/:roomname', function(req, res, next) { res.writeHead(200); fs.createReadStream(path.resolve(__dirname, 'site', 'index.html')).pipe(res); });
*/ var express = require('express'); var app = express(); var redis = require('redis-url').connect(process.env.REDISTOGO_URL); var cachey = require('cachey')({redisClient:redis}); var db = new (require('./lib/db'))(cachey, 60 * 60); var browserify = require('browserify-middleware'); require('datejs'); /** * Configure App */ browserify.settings.production('cache', '20 mins'); browserify.settings.mode = process.env.NODE_ENV || 'development'; process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; app.configure(function() { app.set('view engine', 'html'); app.engine('html', require('hbs').__express); app.use(express['static']('./public')); }); app.configure('development', function() { app.use(express.logger('dev')); }); if(process.env.CROSS_SITE) {
module.exports = function serveScripts(opts, server) { if (!(this instanceof serveScripts)) return new serveScripts(opts); var self = this; var log = opts.log; self.serveRoutes = serveRoutes; self.outputAll = outputAll; // for pub -O var browserify = require('browserify-middleware'); // expose build-bundle for output to file browserify.buildBundle = require('browserify-middleware/lib/build-bundle.js'); /* browsrify pregen with production is slow */ if ((opts.outputOnly || opts.minify) && !opts.dbg) { browserify.settings.mode = 'production'; } browserify.settings( { ignore: ['request', 'request-debug', 'graceful-fs', 'resolve', 'osenv', 'tmp'], ignoreMissing: false } ); browserify.settings.production('cache', '1h'); // prepare array of browserscripts including builtins self.scripts = u.map(opts.browserScripts, function(script) { var o = { route: script.route, path: script.path, delay: script.delay, opts: u.omit(script, 'path', 'route', 'inject', 'maxAge') } if ('maxAge' in script) { o.opts.cache = script.maxAge || 'dynamic'; } return o; }); self.scripts.push( { route: '/server/pub-sockets.js', path: fspath.join(__dirname, '../client/pub-sockets.js') } ); // editor scripts if (opts.editor) { if (!opts.spa) { self.scripts.push( { route: '/pub/pub-ux.js', path: fspath.join(__dirname, '../client/pub-ux.js') } ); } self.scripts.push( { route: '/pub/_generator.js', path: fspath.join(__dirname, '../client/_generator.js'), } ); self.scripts.push( { route: '/pub/_generator-plugins.js', path: fspath.join(__dirname, '../client/_generator-plugins.js'), opts: { transform: [transformPlugins] } } ); } return; //--//--//--//--//--//--//--//--//--//--//--//--//--//--//--// // deploy browserify scripts and editor/admin handlers function serveRoutes(server) { var app = server.app; var generator = server.generator; // route browserscripts, including builtins u.each(self.scripts, function(script) { var handler = browserify(script.path, script.opts); if (script.delay) { var delayed = function(req, res) { debug(req.path, 'waiting', script.delay); setTimeout(function() { debug(req.path, 'done waiting', script.delay); handler(req, res); }, u.ms(script.delay)); } } app.get(script.route, delayed || handler); }); // editor api if (opts.editor) { app.post('/pub/_files', function(req, res) { generator.serverSave(req.body, req.user, function(err, results) { if (err) return res.status(500).send(err); res.status(200).send(results); }) }); app.get('/pub/_opts.json', function(req, res) { res.set('Cache-Control', 'no-cache'); res.send(serializeOpts(server.generator)); }); } // admin api app.get('/admin/flushCaches', function(req, res) { generator.flushCaches(function(err, results) { if (err) return res.status(500).send(err); res.status(200).send(results); }) }); app.get('/admin/reloadSources', function(req, res) { res.send(generator.reloadSources(req.query.src)); }); app.get('/admin/outputPages', function(req, res) { res.send(generator.outputPages(req.query.output)); }); app.get('/admin/logPages', function(req, res) { res.send(generator.logPages()); }); app.get('/admin/reload', function(req, res) { generator.reload() res.status(200).send('OK'); }); } // publish browserscripts function outputAll(generator) { var output = (opts.outputs && opts.outputs[0]); if (!output) return log('scripts.outputAll: no output'); var omit = output.omitRoutes; if (omit && !u.isArray(omit)) { omit = [omit]; } // TODO: re-use similar filter in server/serve-statics and generator.output var filterRe = new RegExp( '^(/admin/|/server/' + (opts.editor ? '' : '|/pub/') + (omit ? '|' + u.map(omit, u.escapeRegExp).join('|') : '') + ')'); u.each(self.scripts, function(script) { if (filterRe.test(script.route)) return; var out = fspath.join(output.path, script.route); var ws = fs.createOutputStream(out); ws.on('finish', function() { log('output script: %s', out); }); ws.on('error', log); // from browserify-middleware index.js (may need to do noParse map also) var options = browserify.settings.normalize(script.opts); var bundler = browserify.buildBundle(script.path, options); if (!opts.dbg) { bundler.plugin(require.resolve('minifyify'), { map:false } ); } bundler.bundle().pipe(ws); }); if (opts.editor) { var out = fspath.join(output.path, '/pub/_opts.json'); fs.outputJson(out, serializeOpts(generator, true, output), function(err) { log(err || 'output opts: %s', out); }); } } // browserify transform for sending plugins // invoked using require('./__plugins') function transformPlugins(path) { if (!/_generator-plugins/.test(path)) return through(); return through( function tform(chunk, enc, cb) { cb() }, // ignore input function flush(cb) { this.push(requirePlugins()); cb(); } ); } function requirePlugins() { var s = u.reduce(opts.generatorPlugins.reverse(), function(memo, plugin) { return memo + 'require("' + plugin.path + '")(generator);\n'; }, ''); return s; } function serializeOpts(generator, toStatic, outputDest) { var sOpts = u.omit(opts, 'output$', 'source$', 'log', 'session'); // provide for detection of static hosted editor if (toStatic) { sOpts.staticHost = true; } // pass output.fqImages -> static opts for use in static editor/generator if (outputDest && outputDest.fqImages) { sOpts.fqImages = outputDest.fqImages; } sOpts.staticPaths = u.map(opts.staticPaths, function(staticPath) { return u.omit(staticPath, 'files', 'src'); }); sOpts.outputs = u.map(opts.outputs, function(output) { return u.omit(output, 'files', 'src'); }); sOpts.sources = u.map(opts.sources, function(source) { var rawSource = u.omit(source, 'files', 'src', 'file$', 'fragments', 'updates', 'snapshots', 'drafts', 'cache'); rawSource.files = source.type === 'FILE' ? generator.serializeFiles(source.files) : source.files; return rawSource; }); return sOpts; } }
var express = require('express'); var browserify = require('browserify-middleware'); var exposify = require('exposify'); exposify.config = {react: 'React', 'react/addons': 'React'}; var app = express(); browserify.settings({ transform: [ ['reactify', {es6: true, sourceMaps: true}], [exposify, {global:true}] ] }); browserify.settings.development({ cache: 'dynamic', gzip: true, precompile: true }); app.all('/', function(req, res) { res.sendFile('./index.html', {root: __dirname}); }); app.get('/example.js', browserify('./example.js')); app.listen(3000);