
Security News
Node.js TSC Declines to Endorse Feature Bounty Program
The Node.js TSC opted not to endorse a feature bounty program, citing concerns about incentives, governance, and project neutrality.
babel-plugin-import-glob
Advanced tools
Babel plugin to enable importing modules using a glob pattern
Babel plugin to enable importing modules using a glob pattern. Tested with Node.js 4 and above.
npm install --save-dev babel-plugin-import-glob
Then add import-glob
to your .babelrc
file, like:
{
"plugins": ["import-glob"]
}
This plugin is useful if you have multiple modules but you don't want to import them one at a time.
Maybe you're using the
handlebars-inline-precompile
plugin and are putting your modules in a templates
directory. Or you need to
dynamically reference one out of several classes and don't want to maintain the
lookup by hand. Perhaps you need to load multiple modules for their side-effects
and wish to simply add them to a directory without additional work. If so, this
plugin is for you!
Of course in the vast majority of cases you should just use normal import statements. Don't go overboard using this plugin.
You can import the default members of any matching module. Let's say you have a directory layout like this:
index.js
templates/main.handlebars.js
templates/_partial.handlebars.js
In index.js
you can write:
import { main, _partial } from './templates/**/*.handlebars.js'
You can add an optional glob:
prefix:
import { main, _partial } from 'glob:./templates/**/*.handlebars.js'
You can alias members:
import { main, _partial as partial } from './templates/**/*.handlebars.js'
Or import all matches into a namespace object:
import * as templates from './templates/**/*.handlebars.js'
// Provides `templates.main` and `templates._partial`
Note that you cannot import the default from the glob pattern. The following
won't work and throws a SyntaxError
:
import myTemplates from './templates/**/*.handlebars.js' // This will throw a SyntaxError
You can load modules for their side-effects though:
import './modules-with-side-effects/*.js'
The plugin uses the glob
package. Please refer to its documentation regarding
the pattern syntax.
The glob pattern must be relative. It must start with ./
or ../
. A
SyntaxError
is thrown otherwise.
Identifiers are generated for all matches using the dynamic portions of the pattern. File-separators in the resulting strings are replaced by dollar signs. The strings are then converted into identifiers.
A valid identifier cannot always be generated. If that's the case a
SyntaxError
is thrown with more details. Similarly multiple matches may result
in the same identifier. This also results in a SyntaxError
being thrown.
For the ./templates/**/*.handlebars.js
example above the matches are:
./templates/main.handlebars.js
./templates/_partial.handlebars.js
The dynamic portions are main
and _partial
. These are valid identifiers and
therefore used as the import members.
A SyntaxError
is throw when importing a member that does not correspond to a
match:
import { doesNotExist } from './templates/**/*.handlebars.js' // This will throw a SyntaxError
Here's an overview of how the members are determined for additional matches:
Match | Result | Reason |
---|---|---|
./templates/terms-and-conditions.handlebars.js | termsAndConditions | The - cannot be used in the identifier so it's removed. The following character is uppercased |
./templates/blog/footer.handlebars.js | blog$footer | The blog directory is captured by the ** expression in the pattern. It is joined with the footer name using a dollar sign |
./templates/-main.handlebars.js | SyntaxError | The - is removed, resulting in the same identifier as for main.handlebars.js |
./templates/new.handlebars.js | _new | new is a reserved word so it's prefixed with an underscore |
./templates/blog/new.handlebars.js | blog$new | Even though new is a reserved word, it's combined with blog$ so no prefix is necessary |
./templates/404.handlebars.js | _404 | Identifiers can't start with digits so it's prefixed with an underscore |
./templates/error-pages/404.handlebars.js | errorPages$404 | Now that 404 is combined with errorPages$ it no longer needs to be prefixed |
./templates/🙊.handlebars.js | SyntaxError | No identifier can be generated for 🙊 |
Brace expansions are not considered to be a dynamic portion of the pattern.
Given the pattern ./templates/{blog,error-pages}/*.handlebars.js
:
Match | Result |
---|---|
./templates/blog/footer.handlebars.js | footer |
./templates/error-pages/404.handlebars.js | _404 |
Use parentheses patterns instead, e.g.
./templates/{@(blog),@(error-pages)}/*.handlebars.js
:
Match | Result |
---|---|
./templates/blog/footer.handlebars.js | blog$footer |
./templates/error-pages/404.handlebars.js | errorPages$404 |
FAQs
Babel plugin to enable importing modules using a glob pattern
The npm package babel-plugin-import-glob receives a total of 3,738 weekly downloads. As such, babel-plugin-import-glob popularity was classified as popular.
We found that babel-plugin-import-glob demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
The Node.js TSC opted not to endorse a feature bounty program, citing concerns about incentives, governance, and project neutrality.
Research
Security News
A look at the top trends in how threat actors are weaponizing open source packages to deliver malware and persist across the software supply chain.
Security News
ESLint now supports HTML linting with 48 new rules, expanding its language plugin system to cover more of the modern web development stack.