javascript - 如何在 Next.js 中最好地导入“仅服务器”代码?
问题描述
在getServerSideProps
我的索引页面的函数中,我想使用一个函数foo
,从另一个本地文件导入,它依赖于某个 Node 库。所述库不能在浏览器中运行,因为它依赖于“仅服务器”模块,例如fs
或request
.
我一直在使用以下模式,但想对其进行优化。将其定义foo
为可变以使其在范围内是笨拙的,并且似乎可以避免。
let foo;
if (typeof window === "undefined") {
foo = require("../clients/foo");
}
export default function Index({data}) {
...
}
export async function getServerSideProps() {
return {
props: {data: await foo()},
}
}
这里的最佳做法是什么?是否有可能利用 ES6 的动态导入功能?动态导入 inside怎么 getServerSideProps
样?
我正在使用 Next.js 版本9.3.6
。
谢谢。
更新:
似乎 Next.js 自己的动态导入解决方案就是这个问题的答案。我仍在测试它,并会在完成后相应地更新这篇文章。文档对我来说似乎很困惑,因为他们提到禁用 SSR 的导入,但反之则不然。
解决方案
使用getServerSideProps
/Next.jsgetStaticProps
时会自动从客户端包中删除所有仅服务器代码。在浏览器上运行服务器代码没有风险。
您可以使用Next.js 代码消除工具来验证客户端捆绑的内容。您会注意到getServerSideProps
/getStaticProps
和它使用的导入一样被删除。
推荐阅读
- c++ - 将二维数组指针参数分配给局部数组指针变量
- python - Attension Layer Tensorflow TypeError:无法迭代具有未知第一维的张量
- salesforce - 闪电组件recordUpdated方法绑定触发stale data事件
- google-kubernetes-engine - GKE Stackdriver 中 Dropwizard 指标的最新最佳实践
- python - 如何使用 Python 获得点和抛物线之间的最小距离?
- python - 如何使用 Pandas 在 Python 中消除重复的表单提交行?
- git - 在 github 存储库上获取讨论选项卡?
- c# - 如何编写以实体 ID 为条件的 C# 互斥块?
- excel - 检查是否显示用户表单
- python - 设置字体粗细时 QLabel 中 QSS 和富文本的奇怪行为