gpt4 book ai didi

ecmascript-6 - 使用 es6 和 babel-node 从根目录导入节点模块

转载 作者:行者123 更新时间:2023-12-03 06:58:04 24 4
gpt4 key购买 nike

我正在使用 babel transpiler 使用 es6 编写一个节点应用程序。

我的根目录中有 2 个文件 index.jsmy-module.js

- index.js
- my-module.js

我的模块.js

export let myFunc = () => {
console.log('myFunc was called!!!');
}

index.js

import {myFunc} from './my-module';
myFunc();

如果我从命令行运行以下行,一切都会按预期工作。

$ babel-node index.js >> myFunc was called!!!

但是如果我在导入 my-module 时删除点:

import {myFunc} from '/my-module';
myFunc();

我收到错误:

Error: Cannot find module '/my-module'

为什么我无法使用绝对路径导入模块?无论如何要更改 .babelrc 配置来支持它吗?

谢谢

最佳答案

就像(几乎)任何工具一样,“/x”表示文件系统根目录中的“x”。 Babel 实际上并不查看路径,它只是编译

import {myFunc} from '/my-module';

进入

var _myModule = require('/my-module');

节点实际上会查找模块。

<小时/>

如果您确实想相对于项目的根目录导入,您可以使用插件。我建议使用不太含糊的内容,并确保为下一个阅读代码的人记录下来!

下面是一个示例,我们使用前导 ~ 来表示项目相关。你可以使用任何你喜欢的东西,例如^ 也不错。

输入示例:

import {a} from '~my-module';
import {b} from '/my-module';
import {c} from './my-module';

脚本/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"
]
}

输出(如果在/tmp 中运行):

'use strict';

var _tmpMyModule = require('/tmp/my-module');

var _myModule = require('/my-module');

var _myModule2 = require('./my-module');

关于ecmascript-6 - 使用 es6 和 babel-node 从根目录导入节点模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31068698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com