Ответ 1
Как (почти) любой инструмент '/x' означает "x" в корне вашей файловой системы. Бабель фактически не смотрит на пути, он просто компилирует
import {myFunc} from '/my-module';
в
var _myModule = require('/my-module');
И node действительно ищет модуль.
Если вы действительно хотите импортировать относительно корня проекта, вы можете использовать плагин. Я рекомендую использовать что-то, что не очень двусмысленно, и убедитесь, что вы документируете это для следующего человека, читающего ваш код!
Здесь пример, в котором мы используем ведущий ~
для обозначения отношения к проекту. Вы можете использовать все, что вам нравится, например. ^
также будет хорошим.
Пример ввода:
import {a} from '~my-module';
import {b} from '/my-module';
import {c} from './my-module';
Сценарии/столпотворение-плагин-проект-Относительный-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 be safe
if (!babel.types.isLiteral(node.source)) {
return node;
}
var ref = node.source.value;
// ensure a value, make sure it 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"
]
}
Выход (если выполняется в /tmp ):
'use strict';
var _tmpMyModule = require('/tmp/my-module');
var _myModule = require('/my-module');
var _myModule2 = require('./my-module');