You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron+Nuxt项目构建时本地模块无法访问mongodb模块

问题描述

我有一个基于Electron和Nuxt的项目,在main.js中通过以下代码导入mongo.js文件:

var mongo = isDev() ? require("./assets/mongo.js") : require("../assets/mongo.js") ;

mongo.js文件内容如下:

var { MongoClient } = require('mongodb').MongoClient;

module.exports = {
    // 一些函数
}

开发环境下项目可正常运行并访问相关函数,但构建打包时出现错误:

Cannot find module 'mongodb'

为了打包mongo文件,我已经在package.json的build配置中添加了extraResources:

"build":
    ...
    "extraResources": [
      "assets/**"
    ],
    ...

我推测是因为mongo.js被归为extraResources后无法访问node_modules中的依赖,请问该如何修复这个问题?

解决方案

方法1:将mongodb纳入应用核心依赖(推荐)

把mongodb放在package.json的dependencies中(若之前在devDependencies需转移),确保Electron打包时将它包含进主应用代码包,而非当作外部资源:

  1. 调整package.json依赖配置:
"dependencies": {
  "mongodb": "^x.x.x" // 替换为你实际使用的版本号
}
  1. 移除extraResources里的assets/**配置,或仅保留静态资源类路径。mongo.js作为业务代码,应该被打包进主应用,而非额外资源目录。

方法2:同步打包mongodb到extraResources目录

若必须将mongo.js放在extraResources中,需同时把mongodb依赖也复制到该目录,确保路径可访问:

  1. 修改package.json的build配置:
"build": {
  ...
  "extraResources": [
    "assets/**",
    "node_modules/mongodb/**"
  ],
  ...
}
  1. 在mongo.js中动态调整依赖引入路径,适配打包后的相对位置:
const mongodbImportPath = isDev() ? 'mongodb' : '../node_modules/mongodb';
var { MongoClient } = require(mongodbImportPath).MongoClient;

module.exports = {
    // 一些函数
}

方法3:用asarUnpack解压mongodb依赖

若应用使用asar格式打包,可将mongodb从asar包中单独解压,避免路径访问问题:

"build": {
  ...
  "asarUnpack": [
    "node_modules/mongodb/**"
  ],
  ...
}

同时确保mongo.js被打包进主应用代码,不要放在extraResources目录下。

内容的提问来源于stack exchange,提问作者Alexy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:57:30