I'm writing a node app with es6 using babel transpiler.
I have 2 files index.js
& my-module.js
on my root directory
- index.js
- my-module.js
my-module.js
export let myFunc = () => {
console.log('myFunc was called!!!');
}
index.js
import {myFunc} from './my-module';
myFunc();
if I run the following line from the command line everything works as expected.
$ babel-node index.js >> myFunc was called!!!
but if I remove the dot when importing my-module:
import {myFunc} from '/my-module';
myFunc();
I'm getting an error:
Error: Cannot find module '/my-module'
Any reason why I can't import modules using an absolute path? anyway to change .babelrc config to support it?
Thanks
Like (almost) any tool '/x' means 'x' in the root of your filesystem. Babel doesn't actually look at the paths, it just compiles
into
And node actually looks up the module.
If you really want to import relative to the root of the project, you could use a plugin. I recommend using something that isn't very ambiguous, and make sure you document this for the next person reading your code!
Here's an example where we use a leading
~
to mean project relative. You could use anything you like e.g.^
would also be good.Example Input:
scripts/babel-plugin-project-relative-require.js
.babelrc
Output (if run in /tmp):
The solution from FakeRainBrigand/Gavriguy is good and works well. So i decided to develop a plugin which you can easily install with npm in and use a simple Babel-Plugin.
https://github.com/michaelzoidl/babel-root-import
Hope this helps...
First of all, Babel is just a transpiler from ES2015 to ES5 syntax. Its job is to transpile this:
into this:
Actual module requiring performed by Node, and how Node does it you can read in details here: https://nodejs.org/api/modules.html#modules_file_modules
To summary,
./module
means path to module relative to local directory,/module
is an absolute path to module,module
triggers Node to look for module in localnode_modules
directory and all ascending.