gpt4 book ai didi

node.js - 我可以使用原生 es6 模块 (mjs) 为我的本地模块使用裸导入吗?

转载 作者:搜寻专家 更新时间:2023-11-01 00:36:15 27 4
gpt4 key购买 nike

背景:

假设我的文件夹结构是这样的:

  project/
-- package.json
-- index.mjs
-- lib/
-- config/
-- index.mjs

当我在 Node 中本地使用 require() 时,我可以使用裸导入来引用本地模块,例如:

const x = require('config')

因为我将库文件夹的根目录添加到了 NODE_PATH 环境变量中。 (当然假设当我使用 cjs/require 时扩展名是 .js)

问题:

当我尝试使用原生 es6 模块 (mjs) 执行此操作时,例如:

从“配置”导入 x

我得到错误:


错误 [ERR_MODULE_RESOLUTION_LEGACY]:在 [SOME_ABS_PATH]/index.mjs 中导入时找不到配置。 require() 中的遗留行为会在 [SOME_ABS_PATH]/lib/config/index.mjs 中找到它

问题:

有人知道怎么解决吗?或者在 Node 原生 es6 模块系统中处理本地模块解析的相对路径的 future 是什么?

目前的研究:

到目前为止我在这方面找到的唯一资源来自这里 http://2ality.com/2017/09/native-esm-node.html说明:

Path resolution works slightly differently: ESM does not support NODE_PATH and require.extensions. And its specifiers always being URLs also leads to a few minor differences.

ERR_MODULE_RESOLUTION_LEGACY 下方的错误消息中 - google 几乎什么也没显示。

最佳答案

好吧,一位同事(感谢@robin-balmforth)给了我答案:

来自 https://nodejs.org/api/esm.html#esm_no_node_path它说:

Notable differences between import and require No NODE_PATH NODE_PATH is not part of resolving import specifiers. Please use symlinks if this behavior is desired.

还有一些更规范的东西:

https://github.com/bmeck/node-eps/blob/es6-module/002-es6-modules.md#521-removal-of-non-local-dependencies说:

All of the following will not be supported by the import statement:

$NODE_PATH $HOME/.node_modules $HOME/.node_libraries $PREFIX/lib/node Use local dependencies, and symbolic links as needed.

所以我必须设置一个符号链接(symbolic link),而不是我设置 NODE_PATH 环境变量:

ln -s ../lib node_modules/lib

似乎工作正常。

我们假设原因是为了兼容 es6 模块的浏览器实现?

关于 https://github.com/bmeck 中这一变化背后的原因,有一些讨论在这个 node-eps 问题中 https://github.com/nodejs/node-eps/issues/11喜欢:

The solution is not a workaround, it is how path resolution works. Having a single flat namespace for "bare" path resolution is important.

关于node.js - 我可以使用原生 es6 模块 (mjs) 为我的本地模块使用裸导入吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50870976/

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