Security News
The Risks of Misguided Research in Supply Chain Security
Snyk's use of malicious npm packages for research raises ethical concerns, highlighting risks in public deployment, data exfiltration, and unauthorized testing.
import-all.macro
Advanced tools
A macro for babel-plugin-macros that allows you to import all files that match a glob
A babel-plugin-macro that allows you to import all files that match a glob
You want to import all files that match a glob
without having to import them
individually.
This is a babel-plugin-macro which allows you to import
files that match a glob. It supports import
statements for synchronous
resolution as well as dynamic import()
for deferred resolution (for code
splitting with react router for example).
This module is distributed via npm which is bundled with node and
should be installed as one of your project's devDependencies
:
npm install --save-dev import-all.macro
Once you've
configured babel-plugin-macros
you can import/require import-all.macro
.
The importAll
functions accept a glob
and will transpile your code
to import statements/dynamic imports for each file that matches the given glob.
Let's imagine you have a directory called my-files
with the files a.js
,
b.js
, c.js
, and d.js
.
Here are a few before/after examples:
importAll
uses dynamic import: README:1 importAll
uses dynamic import
import importAll from 'import-all.macro'
document.getElementById('load-stuff').addEventListener('click', () => {
importAll('./files/*.js').then(all => {
console.log(all)
})
})
↓ ↓ ↓ ↓ ↓ ↓
document.getElementById('load-stuff').addEventListener('click', () => {
Promise.all([
import('./files/a.js'),
import('./files/b.js'),
import('./files/c.js'),
import('./files/d.js'),
])
.then(function importAllHandler(importVals) {
return {
'./files/a.js': importVals[0],
'./files/b.js': importVals[1],
'./files/c.js': importVals[2],
'./files/d.js': importVals[3],
}
})
.then(all => {
console.log(all)
})
})
importAll.sync
uses static imports: README:2 importAll.sync
uses static
imports
import importAll from 'import-all.macro'
const a = importAll.sync('./files/*.js')
↓ ↓ ↓ ↓ ↓ ↓
import * as _filesAJs from './files/a.js'
import * as _filesBJs from './files/b.js'
import * as _filesCJs from './files/c.js'
import * as _filesDJs from './files/d.js'
const a = {
'./files/a.js': _filesAJs,
'./files/b.js': _filesBJs,
'./files/c.js': _filesCJs,
'./files/d.js': _filesDJs,
}
importAll.deferred
gives an object with dynamic imports: README:3
importAll.deferred
gives an object with dynamic imports
import importAll from 'import-all.macro'
const routes = importAll.deferred('./files/*.js')
↓ ↓ ↓ ↓ ↓ ↓
const routes = {
'./files/a.js': function () {
return import('./files/a.js')
},
'./files/b.js': function () {
return import('./files/b.js')
},
'./files/c.js': function () {
return import('./files/c.js')
},
'./files/d.js': function () {
return import('./files/d.js')
},
}
Configure importAll
to transform import path before generating imports
babel-plugin-macros.config.js
:
module.exports = {
importAll: {
transformModulePath(modulePath, importingPath) {
const projectRoot = path.join(__dirname, '../../')
const modulePathWithoutExt = modulePath.replace(/\.js$/, '')
const absolutePath = path.resolve(
path.dirname(importingPath),
modulePathWithoutExt,
)
const pathRelativeToRoot = path.relative(projectRoot, absolutePath)
return pathRelativeToRoot
},
},
}
import importAll from 'import-all.macro'
const a = importAll.sync('./files/*.js')
↓ ↓ ↓ ↓ ↓ ↓
import * as _filesA from './files/a'
import * as _filesB from './files/b'
import * as _filesC from './files/c'
import * as _filesD from './files/d'
const a = {
'./files/a': _filesA,
'./files/b': _filesB,
'./files/c': _filesC,
'./files/d': _filesD,
}
Some static analysis tools (like ESLint, Flow, and Jest) wont like this very
much without a little additional work. So Jest's watch mode may not pick up all
your tests that are relevant based on changes and some ESLint plugins (like
eslint-plugin-import
) will probably fail on this.
I'm not aware of any, if you are please make a pull request and add it here!
Looking to contribute? Look for the Good First Issue label.
Please file an issue for bugs, missing documentation, or unexpected behavior.
Please file an issue to suggest new features. Vote on feature requests by adding a 👍. This helps maintainers prioritize what to work on.
Thanks goes to these people (emoji key):
Kent C. Dodds 💻 📖 🚇 ⚠️ | Jonathan Neal 📖 | Rafał Ruciński 🐛 💻 | Justin Dorfman 🔍 | Michaël De Boey 💻 | Jianhua Cheng 💻 ⚠️ 📖 |
This project follows the all-contributors specification. Contributions of any kind welcome!
MIT
FAQs
A macro for babel-plugin-macros that allows you to import all files that match a glob
The npm package import-all.macro receives a total of 4,223 weekly downloads. As such, import-all.macro popularity was classified as popular.
We found that import-all.macro 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
Snyk's use of malicious npm packages for research raises ethical concerns, highlighting risks in public deployment, data exfiltration, and unauthorized testing.
Research
Security News
Socket researchers found several malicious npm packages typosquatting Chalk and Chokidar, targeting Node.js developers with kill switches and data theft.
Security News
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.