From eff3b3a1b04e4e70887de2b984df837bf5d8f436 Mon Sep 17 00:00:00 2001 From: Jeff Balboni Date: Wed, 29 Jun 2016 15:20:57 -0400 Subject: [PATCH] Initial code --- .gitignore | 2 ++ README.md | 23 ++++++++++++++++++++++- index.js | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 30 ++++++++++++++++++++++++++++++ 4 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 index.js create mode 100644 package.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2d2b47d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.idea +node_modules \ No newline at end of file diff --git a/README.md b/README.md index 078effa..15619b7 100644 --- a/README.md +++ b/README.md @@ -1 +1,22 @@ -# browserify-builder-middleware \ No newline at end of file +# browserify-builder-middleware + +Express middleware for browserify-builder + +##Usage + +``` +var express = require('express'); +var browserifyBuilderMiddleware = require('browserify-builder-middleware'); +var config = require('./builder.config.js'); +var app = express(); + +app.use(browserifyBuilderMiddleware(config, { publicPath: appPath, lazy: true})); +``` + +##Options + +- publicPath + - The path to append to the relative output path of the bundles +- lazy + - Only compile app bundles when they are requested + - Default: `false` \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..ec6a817 --- /dev/null +++ b/index.js @@ -0,0 +1,52 @@ +'use strict'; + +var watchify = require('watchify-middleware'); +var createBuilder = require('browserify-builder'); +var merge = require('lodash/fp/merge'); + +module.exports = function createMiddleware(config, middlewareConfig) { + var builder = createBuilder(merge(config, {parallel: false, options: {cache: {}, packageCache: {}}})); + + var bundles = builder.getBundles(); + + var sharedBundles = bundles.filter(function(bundle) { + return bundle.type === 'shared'; + }).reduce(function(bundleMap, bundle) { + var emitter = watchify.emitter(bundle.bundle, config.watchOptions); + bundleMap[(middlewareConfig.publicPath + bundle.path.replace('\\', '/')).toLowerCase()] = emitter.middleware; + console.log(bundle.path); + return bundleMap; + }, {}); + + var entryBundles = bundles.filter(function(bundle) { + return bundle.type !== 'shared'; + }).reduce(function(bundleMap, bundle) { + var emitter, + middleware; + + if (middlewareConfig.lazy) { + middleware = function middlewareMemoize(req, res, next) { + if (!emitter) { + emitter = watchify.emitter(bundle.bundle, config.watchOptions); + emitter.emit('pending'); + } + return emitter.middleware(req, res, next); + }; + bundleMap[(middlewareConfig.publicPath + bundle.path.replace('\\', '/')).toLowerCase()] = middleware; + } else { + emitter = watchify.emitter(bundle.bundle, config.watchOptions); + bundleMap[(middlewareConfig.publicPath + bundle.path.replace('\\', '/')).toLowerCase()] = emitter.middleware; + } + + return bundleMap; + }, sharedBundles); + + return function middlewareFn(req, res, next) { + var middleware = entryBundles[req.path.toLowerCase()]; + if (middleware) { + middleware(req, res, next); + } else { + next(); + } + }; +}; diff --git a/package.json b/package.json new file mode 100644 index 0000000..70a25bc --- /dev/null +++ b/package.json @@ -0,0 +1,30 @@ +{ + "name": "browserify-builder-middleware", + "version": "1.0.0", + "description": "Middleware for browserify-builder", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [ + "browserify-tool", + "browserify-builder" + ], + "author": "Buildium", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/buildium/browserify-builder-middleware.git" + }, + "bugs": { + "url": "https://github.com/buildium/browserify-builder-middleware/issues" + }, + "homepage": "https://github.com/buildium/browserify-builder-middleware#readme", + "peerDependencies": { + "browserify-builder": "^1.0.1", + "watchify-middleware": "^1.6.0" + }, + "dependencies": { + "lodash": "^4.13.1" + } +}