桶/索引文件在与next.js一起使用时似乎会产生问题。它似乎不确定是单纯的webpack问题还是webpack和next.js两者都有问题
根据this issue,如果我们使用桶文件,树抖动停止工作。我还创建了a small repo,在那里我有一个索引文件的问题。不确定这是一个树抖动的问题。
重现问题的步骤:
npm install
npm run dev
- 在浏览器中,访问http://localhost:3000/about-pro,预期会在浏览器控制台中看到包含错误或警告空白页面
- 转到服务器的控制台(运行
npm run dev
的位置) - 请参见错误“* 找不到模块:无法解析'fs'*”(1)(2)(3)
1-这来自getAboutPageData
文件中的await serialize
。它本身只在getStaticProps
中调用
2 -在谷歌上搜索这个问题,你会找到解决方案,比如修改next.config.js
文件。它仍然不起作用。请随意取消注解next.config.js
文件,自己看看
3 -要“解决”该问题,请转到about-pro.tsx
,在导入中,从其自身的文件而不是从桶/索引文件导入AboutPage
如果我只从barrel/index文件导入getAboutPageData
,那么它工作得很好。但是一旦我从它导入eidogg. AboutPage
,它就开始引发不相关的问题。
我可以继续在next.js中使用barrel/index文件吗?如果可以,有没有简单直观的方法可以做到这一点?
1条答案
按热度按时间bhmjp9jg1#
问题不在于barrel文件本身,而在于与barrel文件结合使用的library。
如果您查看readme文件https://github.com/hashicorp/next-mdx-remote#examples,您会发现一条警告:
重要提示:将
mdx-remote
代码放入一个单独的“utilities”文件时要非常小心。这样做可能会导致nextjs的代码拆分能力出现问题--它必须能够清楚地确定哪些代码只在服务器端使用,哪些代码应该留在客户端包中。如果您将mdx-remote
代码放入一个外部的utilities文件中,而某些代码被破坏了,请删除它并在提交问题之前从上面的简单示例开始。因此,为了使代码正常工作,需要从桶文件中删除
getAboutPageData
的导出,如下所示:并将使用该库的代码移动到
about-pro.tsx
文件中。我认为问题是在barrel文件中导入的模块在客户端和服务器端都执行。可能从barrel文件中删除副作用可以解决这个问题,但是我对Next.js的了解还不够,无法正确执行。