<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Electron on 映屿</title>
    <link>https://blog.verdant.ee/tags/electron/</link>
    <description>Recent content in Electron on 映屿</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    
      <managingEditor>i@glowisle.me (五葉地錦)</managingEditor>
    
    
      <webMaster>i@glowisle.me (五葉地錦)</webMaster>
    
    
    
    <lastBuildDate>Sat, 31 May 2025 09:07:36 +0800</lastBuildDate>
    
    
    <atom:link href="http://blog.verdant.ee/tags/electron/atom.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Electron CommonJS require踩坑</title>
      <link>https://blog.verdant.ee/posts/electron-commonjs-require%E8%B8%A9%E5%9D%91/</link>
      <pubDate>Sat, 31 May 2025 09:07:36 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/electron-commonjs-require%E8%B8%A9%E5%9D%91/</guid>
      <description>&lt;p&gt;最近在开发一个Electron项目，在导入类的时候有以下报错:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;1411&lt;/span&gt; Uncaught Error: Cannot find module &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;./File&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Require stack:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt; E:\Develop\markdown&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;editor\src\html\index&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;html&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at Module&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;_resolveFilename (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;1408&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;15&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at a&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;_resolveFilename (node:electron&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;js2c&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;renderer_init:&lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;2643&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at defaultResolveImpl (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;1064&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;19&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at resolveForCJSWithHooks (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;1069&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;22&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at Module&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;_load (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;1218&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;37&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at c&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;_load (node:electron&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;js2c&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;node_init:&lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;17950&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at s&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;_load (node:electron&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;js2c&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;renderer_init:&lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;31718&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at TracingChannel&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;traceSync (node:diagnostics_channel:&lt;span style=&#34;color:#d699b6&#34;&gt;322&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;14&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at wrapModuleLoad (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;242&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;24&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at Module&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;require (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;1494&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;12&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;提示找不到模块。&lt;/p&gt;&#xA;&lt;p&gt;Electron中，使用require语句导入，都是默认从项目跟目录开始查找，所以要拼接完整路径。使用绝对路径也是不行的，在IDE里可以跳转，但是一运行就是找不到模块&#xA;&lt;code&gt;const File = require(&amp;quot;src/js/File&amp;quot;)&lt;/code&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Uncaught Error: Cannot find module &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;src/js/File&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Require stack:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt; E:\Develop\markdown&lt;span style=&#34;color:#7a8478&#34;&gt;-&lt;/span&gt;editor\src\html\index&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;html&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at Module&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;_resolveFilename (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;1408&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;15&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at a&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;_resolveFilename (node:electron&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;js2c&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;renderer_init:&lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;2643&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at defaultResolveImpl (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;1064&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;19&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at resolveForCJSWithHooks (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;1069&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;22&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at Module&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;_load (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;1218&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;37&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at c&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;_load (node:electron&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;js2c&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;node_init:&lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;17950&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at s&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;_load (node:electron&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;js2c&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;renderer_init:&lt;span style=&#34;color:#d699b6&#34;&gt;2&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;31718&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at TracingChannel&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;traceSync (node:diagnostics_channel:&lt;span style=&#34;color:#d699b6&#34;&gt;322&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;14&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at wrapModuleLoad (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;242&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;24&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    at Module&lt;span style=&#34;color:#7a8478&#34;&gt;.&lt;/span&gt;require (node:internal&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;modules&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;cjs&lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt;loader:&lt;span style=&#34;color:#d699b6&#34;&gt;1494&lt;/span&gt;:&lt;span style=&#34;color:#d699b6&#34;&gt;12&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;解决方法&#34;&gt;解决方法&lt;/h2&gt;&#xA;&lt;p&gt;使用path.join拼接完整路径&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;const&lt;/span&gt; File &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; require(path.join(__dirname, &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;../js/File.js&amp;#34;&lt;/span&gt;));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;经过测试，只能用这种方法导入，太怪了&lt;/p&gt;&#xA;</description>
    </item>
  </channel>
</rss>
