SvelteKit生产环境因MongoDb无法运行问题求助
SvelteKit + MongoDB 构建与运行问题
问题情况
在SvelteKit项目中使用MongoDB@5.1.0,开发环境运行正常无警告,采用@sveltejs/adapter-node适配器。执行pnpm run build时出现循环依赖提示,直接通过node build/index.js运行构建产物会崩溃,报错找不到mock-aws-s3包,但使用pnpm run preview则能正常运行。
构建时循环依赖信息
> Using @sveltejs/adapter-node "aws-sdk" is imported by "aws-sdk?commonjs-external", but could not be resolved – treating it as an external dependency. "nock" is imported by "nock?commonjs-external", but could not be resolved – treating it as an external dependency. "mock-aws-s3" is imported by "mock-aws-s3?commonjs-external", but could not be resolved – treating it as an external dependency. Circular dependency: node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/change_stream.js -> node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/collection.js -> node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/change_stream.js Circular dependency: node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/collection.js -> node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/operations/rename.js -> node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/collection.js Circular dependency: node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/change_stream.js -> node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/cursor/change_stream_cursor.js -> node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/change_stream.js Circular dependency: node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/change_stream.js -> node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/db.js -> node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/change_stream.js Circular dependency: node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/change_stream.js -> node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/mongo_client.js -> node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/change_stream.js Circular dependency: node_modules/.pnpm/mongodb-connection-string-url@2.6.0/node_modules/mongodb-connection-string-url/lib/index.js -> node_modules/.pnpm/mongodb-connection-string-url@2.6.0/node_modules/mongodb-connection-string-url/lib/redact.js -> node_modules/.pnpm/mongodb-connection-string-url@2.6.0/node_modules/mongodb-connection-string-url/lib/index.js Circular dependency: node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/mongo_client.js -> node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/connection_string.js -> node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/encrypter.js -> node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/mongo_client.js Circular dependency: node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/index.js -> node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/change_stream.js -> node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/mongo_client.js -> node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/connection_string.js -> node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/encrypter.js -> node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/index.js Circular dependency: node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/mongo_client.js -> node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/connection_string.js -> node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/mongo_client.js Circular dependency: node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/sdam/server.js -> node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/sdam/monitor.js -> node_modules/.pnpm/mongodb@5.1.0/node_modules/mongodb/lib/sdam/server.js Circular dependency: node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_readable.js -> node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_duplex.js -> node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_readable.js Circular dependency: node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_duplex.js -> node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_writable.js -> node_modules/.pnpm/readable-stream@3.6.2/node_modules/readable-stream/lib/_stream_duplex.js Circular dependency: node_modules/.pnpm/glob@7.2.3/node_modules/glob/glob.js -> node_modules/.pnpm/glob@7.2.3/node_modules/glob/sync.js -> node_modules/.pnpm/glob@7.2.3/node_modules/glob/glob.js Circular dependency: node_modules/.pnpm/@mapbox+node-pre-gyp@1.0.10/node_modules/@mapbox/node-pre-gyp/lib/node-pre-gyp.js -> node_modules/.pnpm/@mapbox+node-pre-gyp@1.0.10/node_modules/@mapbox/node-pre-gyp/lib/pre-binding.js -> node_modules/.pnpm/@mapbox+node-pre-gyp@1.0.10/node_modules/@mapbox/node-pre-gyp/lib/node-pre-gyp.js Circular dependency: node_modules/.pnpm/semver@7.3.8/node_modules/semver/classes/comparator.js -> node_modules/.pnpm/semver@7.3.8/node_modules/semver/classes/range.js -> node_modules/.pnpm/semver@7.3.8/node_modules/semver/classes/comparator.js
运行时错误信息
Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'mock-aws-s3' imported from /home/gmn/projects/examples/example/build/server/chunks/3-bb04b102.js at new NodeError (node:internal/errors:400:5) at packageResolve (node:internal/modules/esm/resolve:889:9) at moduleResolve (node:internal/modules/esm/resolve:938:20) at defaultResolve (node:internal/modules/esm/resolve:1153:11) at nextResolve (node:internal/modules/esm/loader:163:28) at ESMLoader.resolve (node:internal/modules/esm/loader:842:30) at ESMLoader.getModuleJob (node:internal/modules/esm/loader:424:18) at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:77:40) at link (node:internal/modules/esm/module_job:76:36) Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'mock-aws-s3' imported from /home/gmn/projects/examples/example/build/server/chunks/3-bb04b102.js at new NodeError (node:internal/errors:400:5) at packageResolve (node:internal/modules/esm/resolve:889:9) at moduleResolve (node:internal/modules/esm/resolve:938:20) at defaultResolve (node:internal/modules/esm/resolve:1153:11) at nextResolve (node:internal/modules/esm/loader:163:28) at ESMLoader.resolve (node:internal/modules/esm/loader:842:30) at ESMLoader.getModuleJob (node:internal/modules/esm/loader:424:18) at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:77:40) at link (node:internal/modules/esm/module_job:76:36) Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'mock-aws-s3' imported from /home/gmn/projects/examples/example/build/server/chunks/3-bb04b102.js at new NodeError (node:internal/errors:400:5) at packageResolve (node:internal/modules/esm/resolve:889:9) at moduleResolve (node:internal/modules/esm/resolve:938:20) at defaultResolve (node:internal/modules/esm/resolve:1153:11) at nextResolve (node:internal/modules/esm/loader:163:28) at ESMLoader.resolve (node:internal/modules/esm/loader:842:30) at ESMLoader.getModuleJob (node:internal/modules/esm/loader:424:18) at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:77:40) at link (node:internal/modules/esm/module_job:76:36) Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'mock-aws-s3' imported from /home/gmn/projects/examples/example/build/server/chunks/3-bb04b102.js at new NodeError (node:internal/errors:400:5) at packageResolve (node:internal/modules/esm/resolve:889:9) at moduleResolve (node:internal/modules/esm/resolve:938:20) at defaultResolve (node:internal/modules/esm/resolve:1153:11) at nextResolve (node:internal/modules/esm/loader:163:28) at ESMLoader.resolve (node:internal/modules/esm/loader:842:30) at ESMLoader.getModuleJob (node:internal/modules/esm/loader:424:18) at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:77:40) at link (node:internal/modules/esm/module_job:76:36)
解决方案
- 标记测试依赖为外部包:
mock-aws-s3、nock、aws-sdk是MongoDB的测试/开发依赖,无需打包进生产产物。修改vite.config.js,在SSR配置中标记它们为外部依赖:import { sveltekit } from '@sveltejs/kit/vite'; import { defineConfig } from 'vite'; export default defineConfig({ plugins: [sveltekit()], ssr: { external: ['mock-aws-s3', 'nock', 'aws-sdk'] } }); - 升级MongoDB版本:MongoDB@5.1.0存在依赖树问题,升级到5.2.0及以上版本,或直接升级到6.x系列,这些版本修复了不必要的测试依赖被引入生产构建的问题。执行命令:
pnpm update mongodb@^5.2.0 - 清理并重新安装依赖:可能是pnpm缓存导致依赖解析异常,清理缓存后重新安装:
pnpm store prune && pnpm install - 配置适配器外部依赖:在
svelte.config.js中给adapter-node指定外部依赖:import adapter from '@sveltejs/adapter-node'; import { vitePreprocess } from '@sveltejs/kit/vite'; export default { preprocess: vitePreprocess(), kit: { adapter: adapter({ external: ['mock-aws-s3', 'nock', 'aws-sdk'] }) } };
内容的提问来源于stack exchange,提问作者GMN
相关产品推荐
相关产品推荐

