Express middleware for serving node modules to client side.
Useful for serving client side apps structued as node module package, containing a package.json and dependencies.
modules-middleware:
- Serves sources and static assets from the module directory
- Serves sources and static assets of module dependencies defined in package.json (resolves using node's require.resolve starting from the module directory)
- works with monorepos
- transforms package names to valid browser ES6 paths when serving .js, .jsm and .html source files of the module and dependencies.
for example, a js module containing an ES6 import such as:
import { PolymerElement } from '@polymer/polymer';
will transform into
import { PolymerElement } from '/node_modules/@polymer/polymer/';
- Support node.js require() flexibility, (omitting .js extension, specifying directory name only to serve a contained index.js file, etc..)
- Multiple packages sharing the same dependency at the same version will result in the same client url (for caching)
- Multiple packages sharing the same dependency with different versions will result in a different client url
$ npm install modules-middleware
or
$ yarn add modules-middleware
var modulesMiddleware = require('modules-middleware')
Create a new middleware function to serve files from within a given module path.
The prefix of packages urls for transformed client side sources, defaults to "node_modules".
This is a simple example of using Express.
var express = require('express')
var modulesMiddleware = require('modules-middleware')
var app = express()
app.use(modulesMiddleware('./frontend'));
app.listen(3000)
if you are using a monorepo containing a package of your client side code you may use require.resolve as the module path
var express = require('express')
var modulesMiddleware = require('modules-middleware')
var app = express()
app.use(modulesMiddleware(require.resolve('my-client-app'));
app.listen(3000)