映屿

Electron CommonJS require踩坑

最近在开发一个Electron项目,在导入类的时候有以下报错:

node:internal/modules/cjs/loader:1411 Uncaught Error: Cannot find module './File'
Require stack:
- E:\Develop\markdown-editor\src\html\index.html
    at Module._resolveFilename (node:internal/modules/cjs/loader:1408:15)
    at a._resolveFilename (node:electron/js2c/renderer_init:2:2643)
    at defaultResolveImpl (node:internal/modules/cjs/loader:1064:19)
    at resolveForCJSWithHooks (node:internal/modules/cjs/loader:1069:22)
    at Module._load (node:internal/modules/cjs/loader:1218:37)
    at c._load (node:electron/js2c/node_init:2:17950)
    at s._load (node:electron/js2c/renderer_init:2:31718)
    at TracingChannel.traceSync (node:diagnostics_channel:322:14)
    at wrapModuleLoad (node:internal/modules/cjs/loader:242:24)
    at Module.require (node:internal/modules/cjs/loader:1494:12)

提示找不到模块。

Electron中,使用require语句导入,都是默认从项目跟目录开始查找,所以要拼接完整路径。使用绝对路径也是不行的,在IDE里可以跳转,但是一运行就是找不到模块 const File = require("src/js/File")

Uncaught Error: Cannot find module 'src/js/File'
Require stack:
- E:\Develop\markdown-editor\src\html\index.html
    at Module._resolveFilename (node:internal/modules/cjs/loader:1408:15)
    at a._resolveFilename (node:electron/js2c/renderer_init:2:2643)
    at defaultResolveImpl (node:internal/modules/cjs/loader:1064:19)
    at resolveForCJSWithHooks (node:internal/modules/cjs/loader:1069:22)
    at Module._load (node:internal/modules/cjs/loader:1218:37)
    at c._load (node:electron/js2c/node_init:2:17950)
    at s._load (node:electron/js2c/renderer_init:2:31718)
    at TracingChannel.traceSync (node:diagnostics_channel:322:14)
    at wrapModuleLoad (node:internal/modules/cjs/loader:242:24)
    at Module.require (node:internal/modules/cjs/loader:1494:12)

解决方法

使用path.join拼接完整路径

const File = require(path.join(__dirname, "../js/File.js"));

经过测试,只能用这种方法导入,太怪了


有想对我说的?发一封邮件吧

______ ____ _____ _____ _____ _________ _______ _ __ _ _ .' ___ ||_ \|_ _||_ _||_ _| | _ _ | |_ __ \ / |_ [ | / |_ / |_ / .' \_| | \ | | | | | | |_/ | | \_|.---. _ .--. _ .--. _ __ | |__) |_ .--. ,--. `| |-'.---. | |--. .---.`| |-'`| |-' | | ____ | |\ \| | | ' ' | | | / /__\\[ `/'`\][ `/'`\][ \ [ ] | ___/[ `/'`\]`'_\ : | | / /'`\] | .-. |/ /__\\| | | | \ `.___] |_| |_\ |_ \ \__/ / _| |_ | \__., | | | | \ '/ / _| |_ | | // | |,| |,| \__. | | | || \__.,| |, | |, `._____.'|_____|\____| `.__.' |_____| '.__.'[___] [___] [\_: / |_____| [___] \'-;__/\__/'.___.'[___]|__]'.__.'\__/ \__/ \__.' "A man is not dead while his name is still spoken."