esbuild-plugin-import-pattern

0.1.0 • Public • Published

esbuild-plugin-import-pattern

npm JavaScript Standard Style

esbuild plugin that imports modules based on wildcard patterns.

Attempts to improve upon the ergonomics of esbuild-plugin-import-glob.

Installation

Install the dependency:

npm install esbuild-plugin-import-pattern --save-dev

Configure esbuild:

const esbuild = require('esbuild')
const { importPatternPlugin } = require('esbuild-plugin-import-pattern')

esbuild.build({
  ...
  bundle: true,
  plugins: [importPatternPlugin()]
})

Usage

Import something using a wildcard pattern:

import { entries } from './files/*.js'

console.log(entries)

This will produce an array of tuples, each containing the path to an imported file and its exports:

[
  ['./files/one.js', {  // Source:
    default: 'one'      //   export default 'one'
  }],
  ['./files/two.js', {  // Source:
    default: 2,         //   export default 2
    noun: 'two'         //   export const noun = 'two'
  }],
  ...
]

If you're only interested in the exports, import modules instead of entries. Similarly, you can choose to import paths.

Tips

If you want to look modules up by their path, you can feed entries directly into Object.fromEntries(entries) or new Map(entries).

To use multiple imports in the same module, be sure to rename them using the as keyword:

import { entries as cats } from './cats/*.js'
import { entries as dogs } from './dogs/*.js'

Other than *, you can also use any pattern supported by fast-glob. However, the pattern needs to contain at least one * character.

Selecting Named Imports

By default, each matching import will expose all of its exports. Currently, this makes esbuild produce some unnecessary code. If bundle size is a concern, you will want to avoid this.

As long as all imports export the same name(s), you can tell the plugin to only import those. You do this by appending a hash symbol to the pattern, followed by the names, separated by commas.

For example, to only get the default exports from files/*.js, you would write:

import { modules } from './files/*.js#default'

console.log('Default exports:', modules.map((module) => module.default))

Note that omitting #default will not change the behavior of this script. However, the generated bundle will be bigger.

Author

Tim De Pauw

License

MIT

Readme

Keywords

none

Package Sidebar

Install

npm i esbuild-plugin-import-pattern

Weekly Downloads

1,833

Version

0.1.0

License

MIT

Unpacked Size

7.36 kB

Total Files

5

Last publish

Collaborators

  • timdp