esbuild plugin that imports modules based on wildcard patterns.
npm install esbuild-plugin-import-pattern 
esbuild plugin that imports modules based on
wildcard patterns.
Attempts to improve upon the ergonomics of
esbuild-plugin-import-glob.
Install the dependency:
``bash`
npm install esbuild-plugin-import-pattern --save-dev
Configure esbuild:
`js
const esbuild = require('esbuild')
const { importPatternPlugin } = require('esbuild-plugin-import-pattern')
esbuild.build({
...
bundle: true,
plugins: [importPatternPlugin()]
})
`
Import something using a wildcard pattern:
`js
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:
`js`
[
['./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.paths
Similarly, you can choose to import .
If you want to look modules up by their path, you can feed entries directlyObject.fromEntries(entries)
into or new Map(entries).
To use multiple imports in the same module, be sure to rename them using the
as keyword:
`js`
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.
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:
`js
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.
MIT