nextjs import but don't invoke function throws Module not found: Error: Can't resolve 'dns'
nextjs import but don't invoke function throws Module not found: Error: Can't resolve 'dns'
我的项目 (NextJS) 工作正常,但突然遇到问题 ModuleNotFoundError
。尤其是在nextJs动态路由的情况下。
我看到的错误是:Module not found: Error: Can't resolve 'dns'
在pages
目录pages/programs/[programtype]/[program].jsx
导入mongo时抛出:
ModuleNotFoundError: Module not found: Error: Can't resolve 'dns' in 'node_modules/mongodb/lib'
完整错误转储:
ModuleNotFoundError: Module not found: Error: Can't resolve 'dns' in '/project-path/node_modules/mongodb/lib'
at /project-path/node_modules/webpack/lib/Compilation.js:925:10
at /project-path/node_modules/webpack/lib/NormalModuleFactory.js:401:22
at /project-path/node_modules/webpack/lib/NormalModuleFactory.js:130:21
at /project-path/node_modules/webpack/lib/NormalModuleFactory.js:224:22
at /project-path/node_modules/neo-async/async.js:2830:7
at /project-path/node_modules/neo-async/async.js:6877:13
at /project-path/node_modules/webpack/lib/NormalModuleFactory.js:214:25
at /project-path/node_modules/enhanced-resolve/lib/Resolver.js:213:14
at /project-path/node_modules/enhanced-resolve/lib/Resolver.js:285:5
at eval (eval at create (/project-path/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:13:1)
at /project-path/node_modules/enhanced-resolve/lib/UnsafeCachePlugin.js:44:7
at /project-path/node_modules/enhanced-resolve/lib/Resolver.js:285:5
at eval (eval at create (/project-path/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:13:1)
at /project-path/node_modules/enhanced-resolve/lib/Resolver.js:285:5
at eval (eval at create (/project-path/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:25:1)
at /project-path/node_modules/enhanced-resolve/lib/DescriptionFilePlugin.js:67:43
问题
这是 Next.js 中服务器端代码的一个微妙问题。
错误 清楚 - 您正在尝试在客户端代码中执行服务器端代码(mongo 查询)。但原因并不 显而易见 ,因为使用 Next.js 你应该能够 从你的组件中调用 Mongo。
原因
Next.js 抛出此错误是因为 您正在导入 mongo 代码而不使用它。
听起来很奇怪,但确实如此。
如何避免
要避免此错误,只需删除组件中的任何服务器端代码import
如果您不在[=13]中使用它=].
听起来更奇怪但确实如此.
好的和坏的例子
这很好用:
import { findUsers } from '../lib/queries'
function Home({ users }) {
return (
<h1>Users list</h1>
//users.map and so on...
)
}
export async function getServerSideProps() {
const users = await findUsers()
return {
props: {
users: users
}
}
}
export default Home
虽然这会抛出错误:
import { findUsers } from '../lib/queries'
function Home({ users }) {
return (
<h1>Users list</h1>
//users.map and so on...
)
}
export async function getServerSideProps() {
// call disabled to show the error
// const users = await findUsers()
return {
props: {
users: [] //returning an empty array to avoid other errors
}
}
}
export default Home
将您的服务器端编码模块(例如:模型、数据库连接器)放在页面目录之外。
如果您在使用 Next-js 身份验证时遇到此错误,请确保您的“lib”文件夹位于根目录中。
我的问题是我在 initialprops 中使用了一个函数,该函数是通过 module.exports 而不是 export default
导出的
我的项目 (NextJS) 工作正常,但突然遇到问题 ModuleNotFoundError
。尤其是在nextJs动态路由的情况下。
我看到的错误是:Module not found: Error: Can't resolve 'dns'
在pages
目录pages/programs/[programtype]/[program].jsx
导入mongo时抛出:
ModuleNotFoundError: Module not found: Error: Can't resolve 'dns' in 'node_modules/mongodb/lib'
完整错误转储:
ModuleNotFoundError: Module not found: Error: Can't resolve 'dns' in '/project-path/node_modules/mongodb/lib'
at /project-path/node_modules/webpack/lib/Compilation.js:925:10
at /project-path/node_modules/webpack/lib/NormalModuleFactory.js:401:22
at /project-path/node_modules/webpack/lib/NormalModuleFactory.js:130:21
at /project-path/node_modules/webpack/lib/NormalModuleFactory.js:224:22
at /project-path/node_modules/neo-async/async.js:2830:7
at /project-path/node_modules/neo-async/async.js:6877:13
at /project-path/node_modules/webpack/lib/NormalModuleFactory.js:214:25
at /project-path/node_modules/enhanced-resolve/lib/Resolver.js:213:14
at /project-path/node_modules/enhanced-resolve/lib/Resolver.js:285:5
at eval (eval at create (/project-path/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:13:1)
at /project-path/node_modules/enhanced-resolve/lib/UnsafeCachePlugin.js:44:7
at /project-path/node_modules/enhanced-resolve/lib/Resolver.js:285:5
at eval (eval at create (/project-path/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:13:1)
at /project-path/node_modules/enhanced-resolve/lib/Resolver.js:285:5
at eval (eval at create (/project-path/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:25:1)
at /project-path/node_modules/enhanced-resolve/lib/DescriptionFilePlugin.js:67:43
问题
这是 Next.js 中服务器端代码的一个微妙问题。
错误 清楚 - 您正在尝试在客户端代码中执行服务器端代码(mongo 查询)。但原因并不 显而易见 ,因为使用 Next.js 你应该能够 从你的组件中调用 Mongo。
原因
Next.js 抛出此错误是因为 您正在导入 mongo 代码而不使用它。
听起来很奇怪,但确实如此。
如何避免
要避免此错误,只需删除组件中的任何服务器端代码import
如果您不在[=13]中使用它=].
听起来更奇怪但确实如此.
好的和坏的例子
这很好用:
import { findUsers } from '../lib/queries'
function Home({ users }) {
return (
<h1>Users list</h1>
//users.map and so on...
)
}
export async function getServerSideProps() {
const users = await findUsers()
return {
props: {
users: users
}
}
}
export default Home
虽然这会抛出错误:
import { findUsers } from '../lib/queries'
function Home({ users }) {
return (
<h1>Users list</h1>
//users.map and so on...
)
}
export async function getServerSideProps() {
// call disabled to show the error
// const users = await findUsers()
return {
props: {
users: [] //returning an empty array to avoid other errors
}
}
}
export default Home
将您的服务器端编码模块(例如:模型、数据库连接器)放在页面目录之外。
如果您在使用 Next-js 身份验证时遇到此错误,请确保您的“lib”文件夹位于根目录中。
我的问题是我在 initialprops 中使用了一个函数,该函数是通过 module.exports 而不是 export default
导出的