TypeError: Object(...) is not a function 当将卷从本地目录挂载到 next.js 容器中时
Posted
技术标签:
【中文标题】TypeError: Object(...) is not a function 当将卷从本地目录挂载到 next.js 容器中时【英文标题】:TypeError: Object(...) is not a function when mounting a volume from the local directory into a next.js container 【发布时间】:2021-06-02 16:35:13 【问题描述】:我正在尝试从本地目录挂载一个卷,以便在开发期间为 Next.js/React 的热重载。我当前的 docker-compose.development.yml 看起来像这样:
services:
web:
command: next dev
volumes:
- ./:/usr/src/app
- /usr/src/app/node_modules
- /usr/src/app/.next
depends_on:
db:
condition: service_healthy
它使用命令 docker-compose -f docker-compose.yml -f docker-compose.development.yml up --build
:
services:
web:
build: .
command: /bin/sh -c 'npm run build && npm start'
ports:
- 3000:3000
- 5432:5432
env_file:
- .env.local
在没有开发覆盖和 docker 的情况下它可以正常工作。我相信这个问题与在容器中运行 next dev
有关,因为即使在删除卷绑定后问题仍然存在。这是full call stack。它指向src/pages/_app.tsx
文件中的错误。
【问题讨论】:
【参考方案1】:当您可以在一个环境中构建项目而无法在另一个环境中执行时,这是解决问题的基本步骤。
确保在构建开始之前运行npm install
。
如果这样做,我无法从您共享的共享 sn-ps 中看到。要在容器中构建,您需要安装依赖项。
确保您的 package.json
与开发环境中安装的软件包/模块的版本保持同步。
如果您没有package.json
或者它没有被维护,您可以查看这个SO post 如何再次生成它。
接下来要检查的是 C/C++ 构建环境。一些模块需要 C/C++ 或 C#/mongo 来构建镜像中的环境。此外,通常需要安装特定的dev
共享库。
检查您的包需要哪些依赖项,以及需要在操作系统中安装哪些库才能使模块工作。
最后,一些模块依赖于操作系统(例如,仅适用于 Windows,或仅适用于 macOS),或依赖于体系结构(amd64、arm64 等)
获取有关包/模块的信息并在互联网上进行研究。如果你有这样的模块,你将面临将它们打包到容器中的挑战,所以最好的方法是在你可以容器化之前将它们从你的项目中重构出来。
【讨论】:
好的,我一定会查看依赖关系,谢谢!【参考方案2】:我在 Dockerfile 中将 NODE_ENV
设置为 production
而不是 development
。我认为它与热重新加载的步骤之一冲突。
【讨论】:
以上是关于TypeError: Object(...) is not a function 当将卷从本地目录挂载到 next.js 容器中时的主要内容,如果未能解决你的问题,请参考以下文章
AngularFireList' TypeError: Object(...) is not a function at SwitchMapSubscriber.project
TypeError: 'method' object is not iterable
计算数字的变体 / TypeError: 'int' object is not callable
TypeError: Object(...) is not a function, 从 firebase 调用数据