Like (almost) any tool '/x' means 'x' in the root of your filesystem. Babel doesn't actually look at the paths, it just compiles
import {myFunc} from '/my-module';
into
var _myModule = require('/my-module');
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:
import {a} from '~my-module';
import {b} from '/my-module';
import {c} from './my-module';
scripts/babel-plugin-project-relative-require.js
module.exports = function (babel) {
// get the working directory
var cwd = process.cwd();
return new babel.Transformer("babel-plugin-project-relative-require", {
ImportDeclaration: function(node, parent) {
// probably always true, but let's be safe
if (!babel.types.isLiteral(node.source)) {
return node;
}
var ref = node.source.value;
// ensure a value, make sure it's not home relative e.g. ~/foo
if (!ref || ref[0] !== '~' || ref[1] === '/') {
return node;
}
node.source.value = cwd + '/' + node.source.value.slice(1);
return node;
}
});
};
.babelrc
{
"plugins": [
"./scripts/babel-plugin-project-relative-require.js"
]
}
Output (if run in /tmp):
'use strict';
var _tmpMyModule = require('/tmp/my-module');
var _myModule = require('/my-module');
var _myModule2 = require('./my-module');
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…