Détail du package

express-transform-bare-module-specifiers

nodecg2kMIT1.0.4

Express middleware to transform bare module specifiers on-the-fly.

express, transform, bare, module

readme

express-transform-bare-module-specifiers Build Status codecov

Express middleware to transform bare module specifiers on-the-fly.

Usage

  1. Install the middleware:

     npm i express-transform-bare-module-specifiers
  2. Import (or require) this package:

     // ES Modules
     import transformMiddleware from 'express-transform-bare-module-specifiers';
    
     // CommonJS
     const transformMiddleware = require('express-transform-bare-module-specifiers').default;
  3. 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'
     }))
  4. rootDir: the project base directory. This should contain the package.json and node_modules of the application. It defaults to process.cwd().

  5. modulesUrl: is the route that you will be serving your node_modules directory 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.

changelog

Change Log

All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

1.0.3 (2020-03-09)

Bug Fixes

1.0.2 (2018-11-14)

Bug Fixes

  • preserve (or add) inline sourcemaps (4501f63)

1.0.1 (2018-11-13)

Bug Fixes

1.0.0 (2018-11-12)

Features