【发布时间】:2021-10-23 04:12:21
【问题描述】:
我在尝试让我的 Web 应用程序在 Windows Azure 应用程序服务上运行时遇到了障碍。
我的应用程序有一个用 TypeScript 编写的 Node.js/Express 后端(使用 tsc,而不是 Webpack 编译),并使用 Sequelize 连接到本地存储的 SQLite 3 数据库。前端是一个基于 Create React App 构建的 React 应用程序。
问题是当 sequelize 尝试 require sqlite3 时,会出现 MODULE_NOT_FOUND 错误,导致 sequelize 抛出“请手动安装 sqlite3 包”。 (请参阅下面的完整堆栈跟踪。)
带有预期文件的 sqlite3 文件夹清楚地存在于 Azure 文件系统的 node_modules 文件夹中,所以我真的不明白 require("sqlite3") 是如何失败的。
这是我迄今为止尝试过的:
- 我尝试了this sequelize issue 中的几乎所有建议。
- 我搜索了 StackOverflow,但大多数问题都与我没有使用的 Electron 有关。尽管如此,我还是阅读了其中的大部分内容,并尝试了任何似乎相关的建议。
- 我确保我的开发机器上的节点版本与我的 Azure Window App Service (14.16.0) 上的相同。
- 我尝试删除 node_modules 文件夹并使用 Azure 控制台运行
npm install --production。 - 我尝试从 Azure 控制台运行
npm rebuild。 - 我尝试从 Azure 控制台运行
npm cache verify。 - 我尝试从 Azure 控制台使用
npm install -g sqlite3全局安装 sqlite3,但该操作被 Azure 禁止。 - 我尝试使用
npm install sqlite3 --build-from-source从源安装 sqlite3。 - 我在 node_modules/sequelize/lib/dialects/abstract/connection-manager.js 中添加了控制台日志语句,以验证传递给 require 语句的模块名称是
"sqlite3",并且确实如此。 - 我尝试将
moduleName替换为实际字符串"sqlite3"。 - 我检查以确保我的应用服务文件列表中的所有 sqlite3 文件都与我的开发计算机上安装的文件相匹配。
- 我可能尝试了很多其他我现在不记得的事情!
不用说,这些事情都没有任何区别。每次我检查日志时,错误都是一样的(我检查了时间戳以确保日志记录系统确实在工作。)
这是完整的堆栈跟踪:
错误:请手动安装 sqlite3 包
- 在 ConnectionManager._loadDialectModule (C:\home\site\wwwroot\node_modules\sequelize\lib\dialects\abstract\connection-manager.js:84:23)
- 在新的 ConnectionManager 上(C:\home\site\wwwroot\node_modules\sequelize\lib\dialects\sqlite\connection-manager.js:24:21)
- 在新的 SqliteDialect 中(C:\home\site\wwwroot\node_modules\sequelize\lib\dialects\sqlite\index.js:15:30)
- 在新的 Sequelize 中 (C:\home\site\wwwroot\node_modules\sequelize\lib\sequelize.js:340:20)
- 在新的 Sequelize (C:\home\site\wwwroot\node_modules\sequelize-typescript\dist\sequelize\sequelize\sequelize.js:16:9)
- 在 getSequelize (C:\home\site\wwwroot\getDatabaseInfo.js:33:16)
- 在 Object.getDatabaseInfo [默认] (C:\home\site\wwwroot\getDatabaseInfo.js:15:23)
- 在对象处。 (C:\home\site\wwwroot\server.js:55:47)
- 在 Module._compile (internal/modules/cjs/loader.js:1063:30)
- 在 Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
- 在 Module.load (internal/modules/cjs/loader.js:928:32)
- 在 Function.Module._load (internal/modules/cjs/loader.js:769:14)
- 在 Module.require (internal/modules/cjs/loader.js:952:19)
- 在 Module.patchedRequire [根据需要] (C:\PROGRA~2\SITEEX~1\APPLIC~1\28F926~1.41\nodejs\node_modules\diagnostic-channel\dist\src\patchRequire.js:15:46 )
- 在需要时 (internal/modules/cjs/helpers.js:88:18)
- 在对象处。 (C:\Program Files (x86)\iisnode\interceptor.js:459:1)
我还能尝试什么?
【问题讨论】:
标签: node.js azure sqlite sequelize.js azure-web-app-service