在带有 ES 模块的 Node.js 中使用相对路径导入

2024-01-07

过去我用过app-module-path每当我想在 Node.js 应用程序中使用相对路径时。如果我通过以下方式使用 ES 模块.mjs格式,如何在某个目录路径变得相对的情况下具有相同的功能?

以另一种方式,我是否能够为目录分配一个别名,以便所有相对路径都相对于该别名,就像如何./是相对于当前目录的路径的别名。


使用“导入”属性

截至 2023 年 3 月,消除 NodeJS 相对路径的一个好方法是使用imports财产在package.json。想要了解更多信息,请参考这篇文章:

  • 如何使用项目根目录中的文件路径在 NodeJS 中导入 JavaScript 文件? https://stackoverflow.com/questions/75806206/how-to-import-javascript-files-in-nodejs-using-file-paths-from-project-root-in.

在下面的代码中,#root 是项目根目录。

(请为这个答案点赞并这个帖子 https://stackoverflow.com/questions/75806206/how-to-import-javascript-files-in-nodejs-using-file-paths-from-project-root-in如果他们帮助你。谢谢!)

对于 CommonJS 风格的 JavaScript:

// package.json
{
  "imports": {
    "#root/*.js": "./*.js"
  }
}

// main.js:
const Source = require('#root/path/to/Source.js');

// Source.js:
module.exports = class Source {
  // ...
}

对于 ECMAScript 风格的 JavaScript:

// package.json:
{
  "type" : "module",
  "imports": {
    "#root/*.js": "./*.js"
  }
}

// main.js
import { Source } from '#root/path/to/Source.js';

// Source.js:
export class Source {
  // ...
}

优点:

  • 不需要“导入”或“要求”任何额外的包(没有 Babel.js、没有 Webpack、没有 RequireJS)。安装 NodeJS 后,此方法开箱即用。

  • IDE 链接按预期工作(按住 Ctrl 键单击类名可直接跳转到源文件。此外,移动源文件(通过拖放)将自动更新文件路径引用。已测试WebStorm 2022.3.2 and VS Code 1.76.2.)

  • 两者都适用.mjs(ECMAScript 模块系统)和.cjs(CommonJS) 文件类型。请看这个参考 .cjs 和 .mjs 上的帖子。 https://stackoverflow.com/questions/57492546/what-is-the-difference-between-js-and-mjs-files

  • 保留的无需修改node_modules目录

  • 无需在操作系统级别设置任何 linux 文件链接

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在带有 ES 模块的 Node.js 中使用相对路径导入 的相关文章

随机推荐

  • 打印友好的 ASP.NET MVC 3 视图

    我想创建 ASP NET MVC 3 视图的打印友好版本 我该怎么做 另外 如果我需要制作视图的几个部分的打印友好版本怎么办 Regards 我使用相同的视图 但有 2 个 CSS 文件 其中一个带有media screen 另一个与med
  • 如何将 Moose 对象序列化为 XML?

    我有一堆遗留模块想要转换为基于 Moose 的模块 这些模块当前具有 toXML 方法 这些方法是使用 XML LibXML 手动编码的 是否有模块或技术可以将 Moose 对象序列化为 XML 我看过 MooseX Storage 但它处
  • 在 Kubernetes 中禁用 cronjob

    我已经安排了一个应用程序作为CronJob在 Kubernetes 中 当代码发生变化时 我也会更改图像CronJob 我正在寻找一个可以禁用当前正在运行的选项CronJob并部署一个新的CronJob与最新的图像版本 我怎样才能禁用Cro
  • 如何根据位置(偶数或奇数)将一个 full=number 分成两组

    我需要将一个txt文件分成2个数组 txt 文件包含完整的数字 我可以不使用字符串吗 例如 对于输入 4 how many line 2 1 3 7 8 0 3 7 我想要数组 1 包含 一行中的第一个数字 2 3 8 3 数组 2 包含
  • 如何确保 rake 任务一次只运行一个进程

    我使用 crontab 在某个时间调用 rake 任务 例如 每 3 小时 我想确保当 crontab 准备好执行 rake 任务时 它可以检查 rake 任务是否正在运行 如果是这样就不要执行 这个怎么做 谢谢 我将把它留在这里 因为我认
  • 静态变量自身的初始化

    考虑以下代码示例 include
  • PyCharm 中的 numpy 问题

    我好像无法安装numpy到 PyCharm 我首先安装了最新的 Python 2 7 8 和 PyCharm 3 4 1 然后我安装了温Python在 PyCharm 中获取numpy and scipy包使用 文件 gt 默认设置 gt
  • Android studio 2020.3.1 检测到手机时 logcat 中没有可调试进程

    大家好 我的新版本有问题android studio 2020 3 1 and android studio 4 2 2 当我插入手机调试应用程序时 logcat可以检测到我的手机 但我无法选择进程 它说 no debuggable pro
  • 如何使用开源许可证[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有点不确定开源许可的工作原理 如果我要选择特定的开源许可证 您实际上需要做什么才能使其适用于您的软件 我想这会比仅仅 声明 您要在 LG
  • vTiger Web服务“ACCESS_DENIED:执行该操作的权限被拒绝ID”

    我想通过 vTiger Web 服务添加 SalesOrder 我正在使用这个 vtwsclib 这是代码
  • 如何使用 Awesomium 将 JavaScript 结果返回到 C#?

    我创建了一个新的WPF项目 并添加了Awesomium 1 6 3 网页控制 http awesomium com download to it 然后 我将这段代码添加到MainWindow xaml cs private void web
  • 创建/编辑 PNG 图像的免费工具? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有可用于创建和编辑 PNG 图像的免费工具 画图网 http getpaint net 会充满热情
  • Laravel:与数组的额外字段同步

    我试图将数据保存在数据透视表中 并使用一个名为 数据 的额外字段 当我保存时我有这个数组 5 gt files 4 gt pictures 3 gt tags 1 gt thumbs 我的桌子看起来像这样 项目ID 选项 ID name 上
  • 带有多重选择的 kivy spinner 小部件

    我正在寻找 Spinner 类型 或类似的东西 的 kivy 小部件 最好在 python kv 文件中 例如 我可以在其中通过复选框选择多个项目 所选项目应在元组 中可用 在图片 start png 中您将找到起始情况 表单中有一个标签和
  • 应用程序进入前台后 viewDidAppear 不会再次触发

    我在 iPhone 应用程序代码中发现了一个问题 即 viewDidAppear 方法并不总是触发 当您启动应用程序时 事件将按预期触发 但是 如果我使用能够进行多任务处理的手机关闭应用程序并重新打开 我的 viewDidAppear 事件
  • Angular js ng 重复条件 ng 类不应用 css 类

    我有一个 ng 重复 它的 ng 类在我的 css 类名称中包含连字符的情况下不应用 css 类 li item name li 我做错了什么吗 如果我将 css 类名更改为 isomeclass 它就可以工作 AngularJS v1 0
  • 将参数传递给 MVC Ajax.ActionLink

    如何将 TextBox 的值作为 ActionLink 的参数发送 我需要使用 Html TextBoxFor 控制器 操作如下所示 public class MyController public ActionRes
  • Microsoft 是否有关于不同 Windows 平台上应用程序数据与用户数据存储的最佳实践文档?

    创建面向多个 Windows 版本的应用程序时 确定应用程序特定数据应存储在何处的最佳实践是什么 具体来说 应用程序特定数据 例如应用程序配置数据 用户特定数据 设置 例如 我知道在 Windows Vista 上有可以使用的环境变量 例如
  • return 语句中的 C++ constexpr 函数

    为什么 constexpr 函数不在编译时计算 而是在运行时在 main 函数的 return 语句中计算 它尝试过 template
  • 在带有 ES 模块的 Node.js 中使用相对路径导入

    过去我用过app module path每当我想在 Node js 应用程序中使用相对路径时 如果我通过以下方式使用 ES 模块 mjs格式 如何在某个目录路径变得相对的情况下具有相同的功能 以另一种方式 我是否能够为目录分配一个别名 以便