express-transform-bare-module-specifiers v1.0.4
express-transform-bare-module-specifiers

Express middleware to transform bare module specifiers on-the-fly.
Usage
Install the middleware:
npm i express-transform-bare-module-specifiersImport (or
require) this package:// ES Modules import transformMiddleware from 'express-transform-bare-module-specifiers'; // CommonJS const transformMiddleware = require('express-transform-bare-module-specifiers').default;Configure and apply the middleware:
// Using defaults: app.use('*', transformMiddleware()); // Using a custom rootDir and modulesUrl: app.use('*', transformMiddleware({ rootDir: path.resolve(__dirname, '/bundles/my-bundle'), modulesUrl: '/bundles/my-bundle/node_modules' }))
rootDir: the project base directory. This should contain the package.json and node_modules of the application. It defaults toprocess.cwd().modulesUrl: is the route that you will be serving yournode_modulesdirectory from. It defaults to/node_modules.
Motivation
ES Modules are great. However, it can be difficult to incorporate existing npm packages, because you have to specify the fully-qualified path to the entrypoint of each and every npm package you wish to use. That is to say: you can't do this:
import * as noop from 'noop3';... you instead must do this (for example):
import * as noop from '../node_modules/noop3/index.js';You can see how this would rapidly become very hard to maintain.
This limitation is present because the ES Modules spec currently does not support so-called "bare module specifiers". That is: any module specifier which does not start with a relative or absolute path, such as /, ./, ../, etc.
This middleware uses a single babel transform to convert these "bare module specifiers" in your code to fully-qualified relative paths. This means that you can just write code which references npm packages installed in your node_modules, and this middleware will handle translating those package names to fully-qualified paths on-the-fly.
Acknowledgements
This middleware is based entirely on the implementation found in polyserve. Except, it uses the babel-plugin-bare-import-rewrite babel plugin instead of the one built into polymer-build.