在使用 ZEIT Now 部署的 Next.js 应用程序中使用绝对导入

2023-11-25

在 Next.js 9 教程中建议的方法导入共享组件是通过相对路径,比如

import Header from '../components/Header';

我想使用绝对导入,例如

import Header from 'components/Header';

我如何使这项工作在本地和当我使用 Now CLI 进行部署?


使用教程中建议的设置,我的项目结构是:

my-project
├── components
├── pages
└── package.json

Next.js 9.4 及更高版本

如果您使用的是 Next.js 9.4 或更高版本,请参阅黑子的回答.


Next.js 9.3 及更早版本

不同的方式实现这一点的方法,但一种方法 - 不需要额外的依赖项,也不需要太多的配置 - 是设置环境变量NODE_PATH到当前目录,即NODE_PATH=..

1. 使其在本地运行

我认为最简单的设置方法NODE_PATH=.在您的中运行开发/构建脚本时package.json本地(例如$ npm run dev or $ yarn dev),就是将其添加到每个脚本中package.json:

"scripts": {
  "dev": "NODE_PATH=. next",
  "build": "NODE_PATH=. next build",
  "start": "next start"
},

2. 部署时使其发挥作用

当您部署到ZEIT Now, NODE_PATH必须以不同的方式设置。

您可以添加一个部署配置通过添加一个now.json文件(它应该与您的目录位于同一目录中)package.json)。如果你没有now.json文件已经存在,创建它并添加以下内容:

{
  "version": 2,
  "build": {
    "env": {
      "NODE_PATH": "."
    }
  }
}

这告诉现在使用NODE_PATH=.构建应用程序时(请参阅构建环境).

(它还告诉我们现在使用现在平台版本2 目前是最新版本(参见version)。省略版本将在您使用以下命令进行部署时发出警告$ now.)

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

在使用 ZEIT Now 部署的 Next.js 应用程序中使用绝对导入 的相关文章

随机推荐

  • C++:std::vector [] 运算符

    Why std vector有 2 个操作员 实现 reference operator size type pos const reference operator size type pos const One for 非常量矢量对象
  • 哪个是正确的:向量或const向量

    哪个是对的 vector
  • 在 mono 中编译的 C# - 检测操作系统

    我正在尝试让一个 C 应用程序在 OSX 下运行 但这并不是完全没有痛苦 为了在短期内解决一些问题 我正在考虑在 OSX 中运行时设置一些特定的规则 但是 我可以使用什么来确定应用程序是在 Windows 还是 OSX 下运行 来自单声道w
  • 线程本地存储变量的地址

    好吧 说我有 thread int myVar 然后我将 myVar 从一个线程传递到另一个线程 如果数据确实是 本地 那么 1 个线程的 TLS 存储可能不会映射到其他线程地址空间 事实上 您可能会认为它不应该是 这会导致 SIGSEGV
  • Git 没有将 gpg 密钥视为秘密,即使它是秘密,我该如何修复它?

    所以看来我的 gpg 密钥是秘密的 但是当我尝试在 git 中签署我的提交时 它不会被识别为秘密 我完全不知道这是为什么 我相信我的设置正确 但我的提交标志失败 难道我做错了什么 预先感谢您的任何帮助 brad reason entry c
  • std::shared_ptr 在空指针上调用非默认删除器

    看这个例子 include
  • 我想从使用 c# 运行的 Windows 盒子通过 ssh 运行命令

    请注意 这必须位于 Windows 盒子上 因为我正在使用 C 来访问有关 Windows 的信息 我需要来自 Windows 盒子和 Linux 盒子的信息 另外我认为制作一个无需 GUI 运行并在没有用户干预的情况下从 Linux 盒子
  • 在 xCode 5 / iOS7 中使导航栏拉伸到状态栏后面

    我按照以下教程将导航栏向下移动 这样它就不会被 xcode 5 ios7 中的状态栏覆盖 iOS7状态栏和导航栏问题 但现在在 iOS7 中 状态栏所在的顶部有一个空白区域 我希望导航栏也能填充这个区域 例如 Facebook twitte
  • HTML WYSIWYG 编辑器:为什么可编辑内容移动到 iFrame 中

    为什么可编辑的 html 被移到 iFrame 中 我分析了不同的编辑器 TinyMce CKEditor 等 并将所有可编辑内容移动到一个单独的 iFrame 中 并将其覆盖在原始文本上 这是什么技术原因 我尝试过contentedita
  • Casperjs:如何打印http请求和响应?

    出于调试目的 我需要查看整个请求 标头和数据 我怎样才能实现这个目标 Casper 好吧 实际上是 PhantomJS 提供了两个回调 一个当资源被请求时 您可以在其中看到正在发送的标头 以及何时收到回复 这样你就可以看到服务器回复的标头
  • 带有固定部分标题的 PullToRefresh 列表

    有没有人有使用实践Pull to refresh列出与Pinned section header I use Android PullToRefreshlib 与我的列表 我想添加在列表顶部显示固定节标题的功能 我用了固定标题列表视图另一个
  • 命令提示符不会将目录更改到另一个驱动器

    我正在尝试编译一些java 当前正在学习java 为此我需要更改命令提示符的目录 C Admin gt cd D Docs Java C Admin gt cd C Admin 它不会更改目录 我再次尝试使用引号 C Admin gt cd
  • jQuery - 如何在事件触发后暂时禁用 onclick 事件侦听器?

    在事件触发后 如何暂时禁用 onclick 事件侦听器 首选 jQuery Example 用户单击按钮并触发下面的此函数后 我想禁用 onclick 侦听器 因此不会向我的 django 视图触发相同的命令 btnRemove click
  • 什么是 Json.NET Mono 程序集参考?

    我正在尝试编译此 Json NET 代码 using Newtonsoft Json MyDesc d JsonConvert DeserializeObject
  • 仅使用蓝牙选项共享意图

    我正在尝试使用我的应用程序通过蓝牙发送文件 我已经将 mime 类型更改为随机的 asdxasd asdxa 该文件有一个我需要使用的扩展名 即 sso 当我使用共享意图时 它只出现蓝牙和 gmail 选项 但我不能从列表中删除 gmail
  • 异常过滤器在 Web api 中不起作用

    我有一个自定义异常过滤器 能够处理控制器中的所有错误 只是一个常见的错误处理机制 public class ExceptionHandlingAttribute ExceptionFilterAttribute public overrid
  • 如何在Tomcat上安装和使用CDI?

    我正在创建我的第一个项目 Java EE 7 但遇到了麻烦 感谢任何帮助 雄猫7 0 34 JSF 2 2 Primefaces 3 5 javaee api 7 0 jar 当应用程序启动时 Tomcat 日志显示以下消息 validat
  • 回调函数触发得太早

    我在 jQuery 中有这个简单的函数 function detailspage page if page checkcurrent checkcurrent page div details children div slideUp sl
  • 如何打印列表中的类型

    所以我得到了一个列表 我必须打印列表中每个项目的类型 我可以清楚地看到有字符串和整数 但我需要它在 Python 中打印出来 我们刚刚了解到for 循环所以我觉得这就是他们正在寻找的东西 但我无法将其打印出来 ls type item fo
  • 在使用 ZEIT Now 部署的 Next.js 应用程序中使用绝对导入

    在 Next js 9 教程中建议的方法导入共享组件是通过相对路径 比如 import Header from components Header 我想使用绝对导入 例如 import Header from components Head