就像(几乎)所有工具一样,“/x”表示您文件系统根目录中的“x”。 Babel实际上并不查看路径,它只是编译。
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';
脚本/scripts/babel-plugin-project-relative-require.js
module.exports = function (babel) {
var cwd = process.cwd();
return new babel.Transformer("babel-plugin-project-relative-require", {
ImportDeclaration: function(node, parent) {
if (!babel.types.isLiteral(node.source)) {
return node;
}
var ref = node.source.value;
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');
npm i -g babel@latest; npm i -D babel-core@latest
。 - Brigandnpm install https://github.com/gavriguy/babel-plugin-project-relative-require.git --save
),它就像魅力一样工作。非常感谢@FakeRainBrigand。 - Gavriguy