<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Alex Wei</title>
    <description>The latest articles on Forem by Alex Wei (@alex114).</description>
    <link>https://forem.com/alex114</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F834561%2F205e84ea-c96d-4f9e-9558-15f6d43d20b0.png</url>
      <title>Forem: Alex Wei</title>
      <link>https://forem.com/alex114</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/alex114"/>
    <language>en</language>
    <item>
      <title>electron-vite: Easy way to protect your Electron source code</title>
      <dc:creator>Alex Wei</dc:creator>
      <pubDate>Tue, 20 Sep 2022 11:47:08 +0000</pubDate>
      <link>https://forem.com/alex114/electron-vite-easy-way-to-protect-your-electron-source-code-4pjb</link>
      <guid>https://forem.com/alex114/electron-vite-easy-way-to-protect-your-electron-source-code-4pjb</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;a href="https://evite.netlify.app/" rel="noopener noreferrer"&gt;electron-vite&lt;/a&gt; is a build tool that aims to provide a faster and leaner development experience for Electron.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We all know that Electron uses javascript to build desktop applications, which makes it very easy for hackers to unpack our applications, modify logic to break commercial restrictions, repackage, and redistribute cracked versions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solutions
&lt;/h2&gt;

&lt;p&gt;To really solve the problem, in addition to putting all the commercial logic on the server side, we need to harden the code to avoid unpacking, tampering, repackaging, and redistributing.&lt;/p&gt;

&lt;p&gt;The mainstream plan:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Uglify / Obfuscator:&lt;/strong&gt; Minimize the readability of JS code by uglifying and obfuscating it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native encryption:&lt;/strong&gt; Encrypt the bundle via XOR or AES, encapsulated into Node Addon, and decrypted by JS at runtime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ASAR encryption:&lt;/strong&gt; Encrypt the Electron ASAR file, modify the Electron source code, decrypt the ASAR file before reading it, and then run it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;V8 bytecode:&lt;/strong&gt; The &lt;code&gt;vm&lt;/code&gt; module in the Node standard library can generate its cache data from script objects (&lt;a href="https://nodejs.org/api/vm.html#vm_script_createcacheddata" rel="noopener noreferrer"&gt;see&lt;/a&gt;). The cached data can be interpreted as v8 bytecode, which is distributed to achieve source code protection.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Scheme comparison:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;-&lt;/th&gt;
&lt;th&gt;Obfuscator&lt;/th&gt;
&lt;th&gt;Native encryption&lt;/th&gt;
&lt;th&gt;ASAR encryption&lt;/th&gt;
&lt;th&gt;V8 bytecode&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unpack&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Easy&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tampering&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Easy&lt;/td&gt;
&lt;td&gt;Easy&lt;/td&gt;
&lt;td&gt;Middle&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Readability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Easy&lt;/td&gt;
&lt;td&gt;Easy&lt;/td&gt;
&lt;td&gt;Easy&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Repackaging&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Easy&lt;/td&gt;
&lt;td&gt;Easy&lt;/td&gt;
&lt;td&gt;Easy&lt;/td&gt;
&lt;td&gt;Easy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Access cost&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Middle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Overall protection&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Middle&lt;/td&gt;
&lt;td&gt;Middle&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For now, &lt;strong&gt;the solution with v8 bytecode seems to be the best one&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Read more:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.mo4tech.com/electron-code-protection-solution-based-on-node-js-addon-and-v8-bytecode.html" rel="noopener noreferrer"&gt;Electron code protection solution based on Node.js Addon and V8 bytecode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is V8 Bytecode
&lt;/h2&gt;

&lt;p&gt;As we can understand, V8 bytecode is a serialized form of JavaScript parsed and compiled by the V8 engine, and it is often used for performance optimization within the browser. So if we run the code through V8 bytecode, we can not only protect the code, but also improve performance.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;electron-vite&lt;/code&gt; inspired by &lt;a href="https://github.com/bytenode/bytenode" rel="noopener noreferrer"&gt;bytenode&lt;/a&gt;, the specific implementation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implement a plugin &lt;code&gt;bytecodePlugin&lt;/code&gt; to parse the bundles, and determines whether to compile to bytecode.&lt;/li&gt;
&lt;li&gt;Start the Electron process to compile the bundles into &lt;code&gt;.jsc&lt;/code&gt; files and ensure that the generated bytecode can run in Electron's Node environment.&lt;/li&gt;
&lt;li&gt;Generate a bytecode loader to enable Electorn applications to load bytecode modules.&lt;/li&gt;
&lt;li&gt;Support developers to freely decide which chunks to compile.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In addition, electron-vite also solves some problems that &lt;code&gt;bytenode&lt;/code&gt; can't solve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed the issue where async arrow functions could crash Electron apps.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Enable Bytecode to Protect Your Electron Source Code
&lt;/h2&gt;

&lt;p&gt;Use the plugin &lt;code&gt;bytecodePlugin&lt;/code&gt; to enable it:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;bytecodePlugin&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;electron-vite&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;main&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;bytecodePlugin&lt;/span&gt;&lt;span class="p"&gt;()]&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;preload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;bytecodePlugin&lt;/span&gt;&lt;span class="p"&gt;()]&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flx4xi45xuf0g52o5veh6.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flx4xi45xuf0g52o5veh6.gif" alt="test1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Customizing Protection
&lt;/h2&gt;

&lt;p&gt;For example, only protect &lt;code&gt;src/main/foo.ts&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

.
├──src
│  ├──main
│  │  ├──index.ts
│  │  ├──foo.ts
│  │  └──...
└──...


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;You can modify your config file like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;bytecodePlugin&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;electron-vite&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;main&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;bytecodePlugin&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;chunkAlias&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;foo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;})],&lt;/span&gt;
    &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;rollupOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;output&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nf"&gt;manualChunks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;foo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
              &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;foo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
          &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;preload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4msh9yqaix8twi7cfhu1.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4msh9yqaix8twi7cfhu1.gif" alt="test2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Examples
&lt;/h2&gt;

&lt;p&gt;You can learn more by playing with the &lt;a href="https://github.com/alex8088/electron-vite-bytecode-example" rel="noopener noreferrer"&gt;example&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  QA
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Impact on code organization and writing?
&lt;/h3&gt;

&lt;p&gt;The only effect that bytecode schemes have found on code so far is &lt;code&gt;Function.prototype.toString()&lt;/code&gt;Method does not work because the source code does not follow the bytecode distribution, so the source code for the function is not available.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does it affect application performance?
&lt;/h3&gt;

&lt;p&gt;There is no impact on code execution performance and a slight improvement.&lt;/p&gt;

&lt;h3&gt;
  
  
  Impact on program volume?
&lt;/h3&gt;

&lt;p&gt;For bundles of only a few hundred KILobytes, there is a significant increase in bytecode size, but for 2M+ bundles, there is no significant difference in bytecode size.&lt;/p&gt;

&lt;h3&gt;
  
  
  How strong is the code protection?
&lt;/h3&gt;

&lt;p&gt;Currently, there are no tools available to decompile V8 bytecode, so this solution is reliable and secure.&lt;/p&gt;

&lt;h2&gt;
  
  
  More electron-vite Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pre-configured:&lt;/strong&gt; Pre-configured for Electron, don't worry about configuration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast HMR:&lt;/strong&gt; HMR for renderer processes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hot Reloading:&lt;/strong&gt; The main process and preload scripts support hot reloading.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easy to Debug:&lt;/strong&gt; Very easy to debug in IDE like vscode or webstorm.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Out-of-the-box:&lt;/strong&gt; Out-of-the-box support for TypeScript, Vue, React, Svelte, SolidJS and more.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  End
&lt;/h2&gt;

&lt;p&gt;You can learn more about electron-vite and source code protection at the following links:&lt;/p&gt;

&lt;p&gt;Docs：&lt;a href="https://evite.netlify.app/" rel="noopener noreferrer"&gt;https://evite.netlify.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub：&lt;a href="https://github.com/alex8088/electron-vite/" rel="noopener noreferrer"&gt;https://github.com/alex8088/electron-vite/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>vite</category>
      <category>electron</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Next generation Electron build tooling based on Vite</title>
      <dc:creator>Alex Wei</dc:creator>
      <pubDate>Sat, 20 Aug 2022 13:08:00 +0000</pubDate>
      <link>https://forem.com/alex114/next-generation-electron-build-tooling-based-on-vite-27j9</link>
      <guid>https://forem.com/alex114/next-generation-electron-build-tooling-based-on-vite-27j9</guid>
      <description>&lt;p&gt;check out &lt;a href="https://evite.netlify.app"&gt;https://evite.netlify.app&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;electron-vite&lt;/strong&gt; is a build tool that aims to provide a faster and leaner development experience for &lt;a href="https://www.electronjs.org"&gt;Electron&lt;/a&gt;. It consists of three major parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A build command that bundles your code with &lt;a href="https://vitejs.dev/"&gt;Vite&lt;/a&gt;, and able to handle Electron's unique environment including &lt;a href="https://nodejs.org/"&gt;Node.js&lt;/a&gt; and browser environments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Centrally configure the main process, renderers and preload scripts Vite configuration, and preconfigure for Electron's unique environment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use fast Hot Module Replacement(HMR) for renderers, extremely improving development efficiency.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;electron-vite is fast, simple and approachable, designed to work out-of-the-box.&lt;/p&gt;

&lt;p&gt;You can learn more about the rationale behind the project in the &lt;a href="https://evite.netlify.app/guide/introduction.html"&gt;Introduction&lt;/a&gt; section.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i electron-vite &lt;span class="nt"&gt;-D&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Command Line Interface
&lt;/h2&gt;

&lt;p&gt;In a project where electron-vite is installed, you can use &lt;code&gt;electron-vite&lt;/code&gt; binary directly with &lt;code&gt;npx electron-vite&lt;/code&gt; or add the npm scripts to your &lt;code&gt;package.json&lt;/code&gt; file like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"electron-vite preview"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;electron&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;app&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;preview&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;production&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;build&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"dev"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"electron-vite dev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;dev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;server&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;electron&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;app&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"prebuild"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"electron-vite build"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;build&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;production&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can specify additional CLI options like &lt;code&gt;--outDir&lt;/code&gt;. For a full list of CLI options, run &lt;code&gt;npx electron-vite -h&lt;/code&gt; in your project.&lt;/p&gt;

&lt;p&gt;Learn more about &lt;a href="https://evite.netlify.app/guide/cli.html"&gt;Command Line Interface&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuring electron-vite
&lt;/h2&gt;

&lt;p&gt;When running &lt;code&gt;electron-vite&lt;/code&gt; from the command line, electron-vite will automatically try to resolve a config file named &lt;code&gt;electron.vite.config.js&lt;/code&gt; inside project root. The most basic config file looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// electron.vite.config.js&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;main&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// vite config options&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;preload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// vite config options&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// vite config options&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Learn more about &lt;a href="https://evite.netlify.app/config/"&gt;Config Reference&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Electron entry point
&lt;/h2&gt;

&lt;p&gt;When using electron-vite to bundle your code, the entry point of the Electron application should be changed to the main process entry file in the output directory. The default &lt;code&gt;outDir&lt;/code&gt; is &lt;code&gt;out&lt;/code&gt;. Your &lt;code&gt;package.json&lt;/code&gt; file should look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"electron-app"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"main"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./out/main/index.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Electron's working directory will be the output directory, not your source code directory. So you can exclude the source code when packaging Electron application.&lt;/p&gt;

&lt;p&gt;Learn more about &lt;a href="https://evite.netlify.app/guide/build.html"&gt;Build for production&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scaffolding Your First electron-vite Project
&lt;/h2&gt;

&lt;p&gt;With NPM&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm create @quick-start/electron
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With Yarn&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn create @quick-start/electron
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With PNPM&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm create @quick-start/electron
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then follow the prompts!&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class="line"&gt;&lt;span&gt;&lt;span&gt;✔&lt;/span&gt; Project name: &lt;span&gt;…&lt;/span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;electron-app&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
&lt;span class="line"&gt;&lt;span&gt;&lt;span&gt;✔&lt;/span&gt; Select a framework: &lt;span&gt;›&lt;/span&gt; &lt;span&gt;vue&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
&lt;span class="line"&gt;&lt;span&gt;&lt;span&gt;✔&lt;/span&gt; Add TypeScript?&lt;/span&gt;&lt;span&gt; … No / &lt;span&gt;Yes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
&lt;span class="line"&gt;&lt;span&gt;&lt;span&gt;✔&lt;/span&gt; Add Electron updater plugin?&lt;/span&gt;&lt;span&gt; … No / &lt;span&gt;Yes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
&lt;span class="line"&gt;&lt;span&gt;&lt;span&gt;✔&lt;/span&gt; Enable Electron download mirror proxy?&lt;/span&gt;&lt;span&gt; … No / &lt;span&gt;Yes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
&lt;span class="line"&gt;&lt;/span&gt;&lt;br&gt;
&lt;span class="line"&gt;&lt;span&gt;Scaffolding project in&lt;/span&gt;&lt;span&gt; ./&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;electron-app&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
&lt;span class="line"&gt;&lt;span&gt;Done.&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
&lt;span class="line"&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You can also directly specify the project name and the template you want to use via additional command line options. For example, to scaffold an Electron + Vue project, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# npm 6.x&lt;/span&gt;
npm create @quick-start/electron my-app &lt;span class="nt"&gt;--template&lt;/span&gt; vue

&lt;span class="c"&gt;# npm 7+, extra double-dash is needed:&lt;/span&gt;
npm create @quick-start/electron my-app &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nt"&gt;--template&lt;/span&gt; vue

&lt;span class="c"&gt;# yarn&lt;/span&gt;
yarn create @quick-start/electron my-app &lt;span class="nt"&gt;--template&lt;/span&gt; vue

&lt;span class="c"&gt;# pnpm&lt;/span&gt;
pnpm create @quick-start/electron my-app &lt;span class="nt"&gt;--template&lt;/span&gt; vue
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Currently supported template presets include:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;JavaScript&lt;/th&gt;
&lt;th&gt;TypeScript&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/alex8088/quick-start/tree/master/packages/create-electron/playground/vanilla"&gt;vanilla&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/alex8088/quick-start/tree/master/packages/create-electron/playground/vanilla-ts"&gt;vanilla-ts&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/alex8088/quick-start/tree/master/packages/create-electron/playground/vue"&gt;vue&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/alex8088/quick-start/tree/master/packages/create-electron/playground/vue-ts"&gt;vue-ts&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/alex8088/quick-start/tree/master/packages/create-electron/playground/react"&gt;react&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/alex8088/quick-start/tree/master/packages/create-electron/playground/react-ts"&gt;react-ts&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/alex8088/quick-start/tree/master/packages/create-electron/playground/svelte"&gt;svelte&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/alex8088/quick-start/tree/master/packages/create-electron/playground/svelte-ts"&gt;svelte-ts&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;See &lt;a href="https://github.com/alex8088/quick-start/tree/master/packages/create-electron"&gt;create-electron&lt;/a&gt; for more details.&lt;/p&gt;

</description>
      <category>vite</category>
      <category>electron</category>
      <category>node</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Quickly make a website with the same style as the Vue official website</title>
      <dc:creator>Alex Wei</dc:creator>
      <pubDate>Mon, 23 May 2022 10:51:27 +0000</pubDate>
      <link>https://forem.com/alex114/quickly-make-a-website-with-the-same-style-as-the-vue-official-website-6d9</link>
      <guid>https://forem.com/alex114/quickly-make-a-website-with-the-same-style-as-the-vue-official-website-6d9</guid>
      <description>&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;

&lt;p&gt;Run the following command in your command line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm init @quick-start/docs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command will install and execute &lt;a href="https://github.com/alex8088/quick-start/tree/master/packages/create-docs"&gt;create-docs&lt;/a&gt;, the scaffolding tool. You will be presented with prompts for a number of optional features such as &lt;code&gt;theme&lt;/code&gt; and &lt;code&gt;TypeScript&lt;/code&gt; support:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✔ Project name: … &amp;lt;my-docs&amp;gt;
✔ Select a theme: › vue
✔ Add TypeScript? … No / Yes

Scaffolding project in ./&amp;lt;my-docs&amp;gt;...
Done.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once the project is created, follow the instructions to install dependencies and start the dev server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;cd&lt;/span&gt; &amp;lt;my-docs&amp;gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The project structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.
├──.vitepress
│  ├──theme
│  │  └──index.ts
│  └──index.ts
├──.vscode
├──docs
│  ├──public
│  │  └──...
│  ├──...
│  └──index.md
├──.editorconfig
├──.prettierrc.yaml
├──env.d.ts
├──package.json
└──tsconfig.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Screenshots
&lt;/h2&gt;

&lt;p&gt;The same style as the Vue official website:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nmZFYQc_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7i8exryyc2dviundsjt2.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nmZFYQc_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7i8exryyc2dviundsjt2.gif" alt="Image description" width="880" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Drak mode:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R4ZbEm2E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r7hxn6tplimxqmg4o94z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R4ZbEm2E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r7hxn6tplimxqmg4o94z.png" alt="Image description" width="880" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Responsive:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OozMGuHW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tb95f4cary97gdgr4nmp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OozMGuHW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tb95f4cary97gdgr4nmp.jpg" alt="Image description" width="880" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Powered
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;VitePress&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Why is VitePress?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster dev server start&lt;/li&gt;
&lt;li&gt;Faster hot updates&lt;/li&gt;
&lt;li&gt;Faster build (uses Rollup internally)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;VitePress-Theme-Vue&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;VitePress theme base on @vue/theme, more practical and comprehensive.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remove hard-coded, make it easy to use&lt;/li&gt;
&lt;li&gt;Refine style, more nice&lt;/li&gt;
&lt;li&gt;Support deploying under nested public path(with base)&lt;/li&gt;
&lt;li&gt;Home page support&lt;/li&gt;
&lt;li&gt;More practical components&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;VitePress-Theme-Vue&lt;/code&gt; Github：&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/alex8088/vitepress-theme-vue"&gt;https://github.com/alex8088/vitepress-theme-vue&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;code&gt;VitePress-Theme-Vue&lt;/code&gt; Guide：&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://alex8088.github.io/vitepress-theme-vue/"&gt;https://alex8088.github.io/vitepress-theme-vue/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  End
&lt;/h2&gt;

&lt;p&gt;The the scaffolding tool &lt;code&gt;create-docs&lt;/code&gt; github:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/alex8088/quick-start/tree/master/packages/create-docs"&gt;https://github.com/alex8088/quick-start/tree/master/packages/create-docs&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>vue</category>
      <category>vitepress</category>
      <category>vite</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Quickly scaffolding an Electron project in 1 min</title>
      <dc:creator>Alex Wei</dc:creator>
      <pubDate>Tue, 05 Apr 2022 13:52:26 +0000</pubDate>
      <link>https://forem.com/alex114/quickly-scaffolding-an-electron-project-in-1-min-522j</link>
      <guid>https://forem.com/alex114/quickly-scaffolding-an-electron-project-in-1-min-522j</guid>
      <description>&lt;h2&gt;
  
  
  create-electron
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;An easy way to start an Electron project&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The link - &lt;a href="https://github.com/alex8088/quick-start/tree/master/packages/create-electron"&gt;https://github.com/.../create-electron&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Compatibility Note:&lt;/strong&gt;&lt;br&gt;
Some templates require a higher Node.js version to work, please upgrade if your package manager warns about it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With npm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;npm create @quick-start/electron
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With Yarn:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;yarn create @quick-start/electron
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With pnpm:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;pnpm create @quick-start/electron
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then follow the prompts!&lt;/p&gt;

&lt;p&gt;You can also directly specify the project name and the template you want to use via additional command line options. For example, to scaffold an Electrn + Vue project, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# npm 6.x&lt;/span&gt;
npm create @quick-start/electron my-app &lt;span class="nt"&gt;--template&lt;/span&gt; vue

&lt;span class="c"&gt;# npm 7+, extra double-dash is needed:&lt;/span&gt;
npm create @quick-start/electron my-app &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nt"&gt;--template&lt;/span&gt; vue

&lt;span class="c"&gt;# yarn&lt;/span&gt;
yarn create @quick-start/electron my-app &lt;span class="nt"&gt;--template&lt;/span&gt; vue

&lt;span class="c"&gt;# pnpm&lt;/span&gt;
pnpm create @quick-start/electron my-app &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nt"&gt;--template&lt;/span&gt; vue
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Currently supported template presets include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sample&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sample-ts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vue&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vue-ts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;react&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;react-ts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;svelte&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;svelte-ts&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;ESLint + Prettier&lt;/code&gt; to better lint and style your code, help you to write high-quality code.&lt;/li&gt;
&lt;li&gt;Use &lt;a href="https://github.com/alex8088/electron-vite"&gt;electron-vite&lt;/a&gt; compiler, a fast javascript builder integrated with &lt;a href="https://vitejs.dev"&gt;Vite&lt;/a&gt;, and you don't need to care about configuration.&lt;/li&gt;
&lt;li&gt;Use &lt;a href="https://github.com/alex8088/electron-toolkit"&gt;electron-toolkit&lt;/a&gt; that make you easy to develop. For example: TSconfigs extends, expose common Electron APIs to renderer process in preload scripts and effective utils for main process.&lt;/li&gt;
&lt;li&gt;Use &lt;a href="https://www.electron.build"&gt;electron-builder&lt;/a&gt; and preset common configuration, allows you to easily pack Electron app.&lt;/li&gt;
&lt;li&gt;Use &lt;a href="https://www.electron.build"&gt;electron-updater&lt;/a&gt; for auto-update, based on electron-builder.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The link - &lt;a href="https://github.com/alex8088/quick-start/tree/master/packages/create-electron"&gt;https://github.com/.../create-electron&lt;/a&gt;&lt;/p&gt;

</description>
      <category>electron</category>
      <category>vite</category>
      <category>vue</category>
      <category>webdev</category>
    </item>
    <item>
      <title>An Electron CLI integrated with Vite</title>
      <dc:creator>Alex Wei</dc:creator>
      <pubDate>Fri, 01 Apr 2022 11:31:41 +0000</pubDate>
      <link>https://forem.com/alex114/an-electron-cli-integrated-with-vite-4be6</link>
      <guid>https://forem.com/alex114/an-electron-cli-integrated-with-vite-4be6</guid>
      <description>&lt;h2&gt;
  
  
  electron-vite
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;An Electron CLI integrated with Vite&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The link - &lt;a href="https://github.com/alex8088/electron-vite"&gt;https://github.com/alex8088/electron-vite&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;⚡️Use the same way as &lt;a href="https://vitejs.dev"&gt;Vite&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🔨Both main process and renderer process source code are built using Vite&lt;/li&gt;
&lt;li&gt;📃The main process and the renderer process Vite configuration are combined into one file&lt;/li&gt;
&lt;li&gt;📦Preset optimal build configuration&lt;/li&gt;
&lt;li&gt;🚀HMR for renderer processes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Install
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i electron-vite &lt;span class="nt"&gt;-D&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Development &amp;amp; Build
&lt;/h3&gt;

&lt;p&gt;In a project where &lt;code&gt;electron-vite&lt;/code&gt; is installed, you can use &lt;code&gt;electron-vite&lt;/code&gt; binary directly with &lt;code&gt;npx electron-vite&lt;/code&gt; or add the npm scripts to your &lt;code&gt;package.json&lt;/code&gt; file like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"electron-vite preview"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;electron&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;app&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;preview&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;production&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;build&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"dev"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"electron-vite dev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;dev&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;server&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;electron&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;app&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"prebuild"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"electron-vite build"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;build&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;production&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In order to use the renderer process HMR, you need to use the &lt;code&gt;environment variables&lt;/code&gt; to determine whether the window browser loads a local html file or a remote URL.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;createWindow&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Create the browser window&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mainWindow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;BrowserWindow&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;800&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;webPreferences&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;preload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;__dirname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../preload/index.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;

  &lt;span class="c1"&gt;// Load the remote URL for development or the local html file for production&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isPackaged&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ELECTRON_RENDERER_URL&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;mainWindow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;loadURL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ELECTRON_RENDERER_URL&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;mainWindow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;loadFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;__dirname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../renderer/index.html&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: For development, the renderer process &lt;code&gt;index.html&lt;/code&gt; file needs to reference your script code via &lt;code&gt;&amp;lt;script type="module"&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Recommended project directory
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;├──src
|  ├──main
|  |  ├──index.js
|  |  └──...
|  ├──preload
|  |  ├──index.js
|  |  └──...
|  └──renderer
|     ├──src
|     ├──index.html
|     └──...
├──electron.vite.config.js
└──package.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Get started
&lt;/h3&gt;

&lt;p&gt;Clone the &lt;a href="https://github.com/alex8088/electron-vite-boilerplate"&gt;electron-vite-boilerplate&lt;/a&gt; or use the &lt;a href="https://github.com/alex8088/quick-start/tree/master/packages/create-electron"&gt;create-electron&lt;/a&gt; tool to scaffold your project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Config file
&lt;/h3&gt;

&lt;p&gt;When running &lt;code&gt;electron-vite&lt;/code&gt; from the command line, electron-vite will automatically try to resolve a config file named &lt;code&gt;electron.vite.config.js&lt;/code&gt; inside project root. The most basic config file looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// electron.vite.config.js&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;main&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// vite config options&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;preload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// vite config options&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// vite config options&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also explicitly specify a config file to use with the &lt;code&gt;--config&lt;/code&gt; CLI option (resolved relative to &lt;code&gt;cwd&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;electron-vite &lt;span class="nt"&gt;--config&lt;/span&gt; my-config.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Tips&lt;/strong&gt;: &lt;code&gt;electron-vite&lt;/code&gt; also supports &lt;code&gt;ts&lt;/code&gt; or &lt;code&gt;mjs&lt;/code&gt; config file.&lt;/p&gt;

&lt;h3&gt;
  
  
  Config intellisense
&lt;/h3&gt;

&lt;p&gt;Since &lt;code&gt;electron-vite&lt;/code&gt; ships with TypeScript typings, you can leverage your IDE's intellisense with jsdoc type hints:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="cm"&gt;/**
 * @type {import('electron-vite').UserConfig}
 */&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alternatively, you can use the &lt;code&gt;defineConfig&lt;/code&gt; and &lt;code&gt;defineViteConfig&lt;/code&gt; helper which should provide intellisense without the need for jsdoc annotations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;defineViteConfig&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;electron-vite&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;main&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;preload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;defineViteConfig&lt;/span&gt;&lt;span class="p"&gt;(({&lt;/span&gt; &lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;mode&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// conditional config use defineViteConfig&lt;/span&gt;
    &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Tips&lt;/strong&gt;: The &lt;code&gt;defineViteConfig&lt;/code&gt; exports from &lt;code&gt;Vite&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Config reference
&lt;/h3&gt;

&lt;p&gt;See &lt;a href="https://vitejs.dev/config"&gt;vitejs.dev&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Config presets
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Build options for &lt;code&gt;main&lt;/code&gt;:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;outDir&lt;/strong&gt;: &lt;code&gt;out\main&lt;/code&gt;(relative to project root)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;target&lt;/strong&gt;: &lt;code&gt;node*&lt;/code&gt;, automatically match node target of &lt;code&gt;Electron&lt;/code&gt;. For example, the node target of Electron 17 is &lt;code&gt;node16.13&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;lib.entry&lt;/strong&gt;: &lt;code&gt;src\main\{index|main}.{js|ts|mjs|cjs}&lt;/code&gt;(relative to project root), empty string if not found&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;lib.formats&lt;/strong&gt;: &lt;code&gt;cjs&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;rollupOptions.external&lt;/strong&gt;: &lt;code&gt;electron&lt;/code&gt; and all builtin modules&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Build options for &lt;code&gt;preload&lt;/code&gt;:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;outDir&lt;/strong&gt;: &lt;code&gt;out\preload&lt;/code&gt;(relative to project root)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;target&lt;/strong&gt;: the same as &lt;code&gt;main&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;lib.entry&lt;/strong&gt;: &lt;code&gt;src\preload\{index|preload}.{js|ts|mjs|cjs}&lt;/code&gt;(relative to project root), empty string if not found&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;lib.formats&lt;/strong&gt;: &lt;code&gt;cjs&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;rollupOptions.external&lt;/strong&gt;: the same as &lt;code&gt;main&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Build options for &lt;code&gt;renderer&lt;/code&gt;:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;root&lt;/strong&gt;: &lt;code&gt;src\renderer&lt;/code&gt;(relative to project root)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;outDir&lt;/strong&gt;: &lt;code&gt;out\renderer&lt;/code&gt;(relative to project root)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;target&lt;/strong&gt;: &lt;code&gt;chrome*&lt;/code&gt;, automatically match chrome target of &lt;code&gt;Electron&lt;/code&gt;. For example, the chrome target of Electron 17 is &lt;code&gt;chrome98&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;lib.entry&lt;/strong&gt;: &lt;code&gt;src\renderer\index.html&lt;/code&gt;(relative to project root), empty string if not found&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;polyfillModulePreload&lt;/strong&gt;: &lt;code&gt;false&lt;/code&gt;, there is no need to polyfill &lt;code&gt;Module Preload&lt;/code&gt; for the Electron renderer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;rollupOptions.external&lt;/strong&gt;: the same as &lt;code&gt;main&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Define option for &lt;code&gt;main&lt;/code&gt; and &lt;code&gt;preload&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;In web development, Vite will transform &lt;code&gt;'process.env.'&lt;/code&gt; to &lt;code&gt;'({}).'&lt;/code&gt;. This is reasonable and correct. But in nodejs development, we sometimes need to use &lt;code&gt;process.env&lt;/code&gt;, so &lt;code&gt;electron-vite&lt;/code&gt; will automatically add config define field to redefine global variable replacements like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;main&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;define&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;process.env&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;process.env&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: If you want to use these configurations in an existing project, please see the Vite plugin &lt;a href="https://github.com/alex8088/vite-plugin-electron-config"&gt;vite-plugin-electron-config&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Config FAQs
&lt;/h3&gt;

&lt;h4&gt;
  
  
  How do I configure when the Electron app has multiple windows?
&lt;/h4&gt;

&lt;p&gt;When your electron app has multiple windows, it means there are multiple html files or preload files. You can modify your config file like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;main&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt;
  &lt;span class="na"&gt;preload&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;rollupOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;__dirname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;src/preload/browser.ts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
          &lt;span class="na"&gt;webview&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;__dirname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;src/preload/webview.ts&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;rollupOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;input&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;__dirname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;src/renderer/browser.html&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
          &lt;span class="na"&gt;webview&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;__dirname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;src/renderer/webview.html&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  CLI options
&lt;/h2&gt;

&lt;p&gt;For the full list of CLI options, you can run &lt;code&gt;npx electron-vite -h&lt;/code&gt; in your project. The flags listed below are only available via the command line interface:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;--ignoreConfigWarning&lt;/code&gt;: boolean, allow you ignore warning when config missing&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;--outDir&lt;/code&gt;: string, output directory (default: out)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  API
&lt;/h2&gt;

&lt;h3&gt;
  
  
  build
&lt;/h3&gt;

&lt;p&gt;Type Signature:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;inlineConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;InlineConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example Usage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;path&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;build&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;electron-vite&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;build&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;outDir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;out&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
      &lt;span class="na"&gt;rollupOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// ...&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;})()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  createServer
&lt;/h3&gt;

&lt;p&gt;Type Signature:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;createServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;inlineConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;InlineConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example Usage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createServer&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;electron-vite&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;createServer&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;server&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1337&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;})()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  preview
&lt;/h3&gt;

&lt;p&gt;Type Signature:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;preview&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;inlineConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;InlineConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{}):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example Usage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;preview&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;electron-vite&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="p"&gt;;(&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;preview&lt;/span&gt;&lt;span class="p"&gt;({})&lt;/span&gt;
&lt;span class="p"&gt;})()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  InlineConfig
&lt;/h3&gt;

&lt;p&gt;The InlineConfig interface extends Vite &lt;a href="https://vitejs.dev/guide/api-javascript.html#inlineconfig"&gt;UserConfig&lt;/a&gt; with additional properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ignoreConfigWarning&lt;/code&gt;: set to &lt;code&gt;false&lt;/code&gt; to ignore warning when config missing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And omit &lt;code&gt;base&lt;/code&gt; property because it is not necessary to set the base public path in Electron.&lt;/p&gt;

&lt;h3&gt;
  
  
  resolveConfig
&lt;/h3&gt;

&lt;p&gt;Type Signature:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;resolveConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;inlineConfig&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;InlineConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;build&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;serve&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;defaultMode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;development&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;ResolvedConfig&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The link - &lt;a href="https://github.com/alex8088/electron-vite"&gt;https://github.com/alex8088/electron-vite&lt;/a&gt;&lt;/p&gt;

</description>
      <category>vite</category>
      <category>electron</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
