
Product
Rust Support Now in Beta
Socket's Rust support is moving to Beta: all users can scan Cargo projects and generate SBOMs, including Cargo.toml-only crates, with Rust-aware supply chain checks.
babel-7-plugin-root-import
Advanced tools
Babel plugin to add the opportunity to use import
and require
with root based paths.
// Usually
import SomeExample from '../../../some/example.js';
const OtherExample = require('../../../other/example.js');
// With Babel-Root-Importer
import SomeExample from '~/some/example.js';
const OtherExample = require('~/other/example.js');
npm
npm install babel-plugin-root-import --save-dev
yarn
yarn add babel-plugin-root-import --dev
Add a .babelrc
file and write:
{
"plugins": [
["babel-plugin-root-import"]
]
}
or pass the plugin with the plugins-flag on CLI
babel-node myfile.js --plugins babel-plugin-root-import
If you want a custom root because for example all your files are in the src/js folder you can define this in your .babelrc
file
{
"plugins": [
["babel-plugin-root-import", {
"rootPathSuffix": "src/js"
}]
]
}
If you don't like the ~
syntax you can just use your own symbol (for example a @
symbol or \
)
{
"plugins": [
["babel-plugin-root-import", {
"rootPathPrefix": "@"
}]
]
}
// Now you can use the plugin like:
import foo from '@/my-file';
You can supply an array of the above. The plugin will try each prefix/suffix pair in the order they are defined.
{
"plugins": [
["babel-plugin-root-import", {
"paths": [{
"rootPathPrefix": "~", // `~` is the default so you can remove this if you want
"rootPathSuffix": "src/js"
}, {
"rootPathPrefix": "@",
"rootPathSuffix": "other-src/js"
}, {
"rootPathPrefix": "#",
"rootPathSuffix": "../../src/in/parent" // since we suport relative paths you can also go into a parent directory
}]
}]
]
}
// Now you can use the plugin like:
import foo from '~/my-file';
const bar = require('@/my-file');
If you use eslint-plugin-import to validate imports it may be necessary to instruct ESLint to parse root imports. You can use eslint-import-resolver-babel-root-import
"import/resolver": {
"babel-plugin-root-import": {}
}
If you use Facebook's Flow for type-checking it is necessary to instruct it on how to map your chosen prefix to the root directory. Add the following to your .flowconfig
file, replacing ~
with your chosen prefix and ensure that the mapping includes the corresponding suffix:
[options]
module.name_mapper='^{rootPathPrefix}/\(.*\)$' -> '<PROJECT_ROOT>{rootPathSuffix}/\1'
Webpack delivers a similar feature, if you just want to prevent end-less import strings you can also define aliases
in the resolve
module, at the moment it doesn't support custom/different symbols and multiple/custom suffixes.
READ MORE
/
in generated paths~
you can use whatever you like)Breaking Change to Babel 5
FAQs
Babel Plugin to enable relative root-import
We found that babel-7-plugin-root-import 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.
Product
Socket's Rust support is moving to Beta: all users can scan Cargo projects and generate SBOMs, including Cargo.toml-only crates, with Rust-aware supply chain checks.
Product
Socket Fix 2.0 brings targeted CVE remediation, smarter upgrade planning, and broader ecosystem support to help developers get to zero alerts.
Security News
Socket CEO Feross Aboukhadijeh joins Risky Business Weekly to unpack recent npm phishing attacks, their limited impact, and the risks if attackers get smarter.