如何使用相对路径加载ES6自定义模块?

发布于 2022-09-12 23:28:32 字数 1890 浏览 16 评论 0

目录结构如下:

app/
    es-module-package/
         index.js
         package.json
    app.js
    package.json

代码如下:

//es-module-package/index.js
export function say(){
    console.log('hello es6!');
}

//es-module-package/package.json
{
    "type": "module",
    "main": "index.js"
}

//app.js
import {say} from './es-module-package';
say();

//package.json
{
    "type": "module"
}

描述:es-module-package是我用es6语法写的一个自定义模块,现在想在app.js中加载这个自定义模块,并使用。

问题描述:

PS C:\Users\Lenovo\Desktop\app> node .\app.js
internal/modules/run_main.js:54
    internalBinding('errors').triggerUncaughtException(
                              ^

Error [ERR_MODULE_NOT_FOUND]: Cannot find module 'C:\Users\Lenovo\Desktop\app\es-module-package' imported from C:\Users\Lenovo\Desktop\app\app.js
    at finalizeResolution (internal/modules/esm/resolve.js:272:11)
    at moduleResolve (internal/modules/esm/resolve.js:649:10)
    at Loader.defaultResolve [as _resolve] (internal/modules/esm/resolve.js:692:13)
    at Loader.resolve (internal/modules/esm/loader.js:97:40)
    at Loader.getModuleJob (internal/modules/esm/loader.js:243:28)
    at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:42:40)
    at link (internal/modules/esm/module_job.js:41:36) {
  code: 'ERR_MODULE_NOT_FOUND'
}

发现无法加载这个自定义模块,但是我发现有两种解决方法:
1.直接引用es-module-package/index.js文件

//app.js
import {say} from './es-module-package/index.js';

say();

2.将es-module-package移动到node_modules目录中并直接引用模块名

app/
    node_modules/
          es-module-package/
               index.js
               package.json
    app.js
    package.json
//app.js
import {say} from 'es-module-package';

say();

疑惑

请问各位这是怎么一回事?如果我不想采用这两种方法请问我该怎么做?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

从﹋此江山别 2022-09-19 23:28:32

目前的es module解析并不支持CommonJS加载器的所有默认行为。其中一个行为差异是文件扩展名的自动解析以及自动导入一个目录下index文件的的能力。

--experimental-specifier-resolution=[mode]标志可以用来定制扩展名解析算法。默认模式是 explicit 的,它要求向加载器提供一个模块的完整路径。要启用自动扩展解析并从自动导入目录下的index文件,请使用 node 模式。

所以你可以这样执行代码

node --experimental-specifier-resolution=node .\app.js

参考资料:
https://nodejs.org/api/esm.ht...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文