<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://esboot.js.org/en/blog</id>
    <title>ESBoot Blog</title>
    <updated>2025-12-15T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://esboot.js.org/en/blog"/>
    <subtitle>ESBoot Blog</subtitle>
    <icon>https://esboot.js.org/en/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[ESBoot 4]]></title>
        <id>https://esboot.js.org/en/blog/esboot-4</id>
        <link href="https://esboot.js.org/en/blog/esboot-4"/>
        <updated>2025-12-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[ESBoot 4 is released!]]></summary>
        <content type="html"><![CDATA[<p>ESBoot 4 is released!</p>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="whats-new">What's new<a href="https://esboot.js.org/en/blog/esboot-4#whats-new" class="hash-link" aria-label="Direct link to What's new" title="Direct link to What's new" translate="no">​</a></h2>
<ul>
<li class="">All In <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules" target="_blank" rel="noopener noreferrer" class="">ES Module</a></li>
<li class=""><a href="https://tailwindcss.com/blog/tailwindcss-v4" target="_blank" rel="noopener noreferrer" class="">Tailwindcss 4</a></li>
<li class=""><code>Pnpm 10</code></li>
<li class=""><code>vite 7</code></li>
<li class=""><code>ESLint flat config</code></li>
<li class="">Update all dependencies</li>
<li class="">Refactor <code>Stylelint rules</code>, add <code>esboot-stylelint-config</code>.</li>
<li class="">Enhance <code>esboot-browser</code>, support more browser tools</li>
<li class="">Add <code>esboot-browser-react</code>, for browser <code>React</code> project support</li>
<li class="">Support <a href="https://vuejs.org/" target="_blank" rel="noopener noreferrer" class="">vue</a></li>
<li class="">Embrace <code>React Compiler</code>.</li>
<li class="">Fix bugs</li>
<li class="">Based on the development of the past year, optimize the <code>template</code> code</li>
<li class="">Optimize Website UI</li>
<li class="">Support <a class="" href="https://esboot.js.org/en/docs/4.0/docs/development/template">Template</a> variables</li>
</ul>
<div class="theme-admonition theme-admonition-info admonition_aMUQ alert alert--info"><div class="admonitionHeading_zZC9"><span class="admonitionIcon_JXbs"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_kVVb"><p>Can't wait to try it? Go to <a class="" href="https://esboot.js.org/en/docs/4.0/docs/migration/migration-v4">Migrate Guide</a>, and start your new journey with ESBoot 4!</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="esboot">ESBoot<a href="https://esboot.js.org/en/blog/esboot-4#esboot" class="hash-link" aria-label="Direct link to ESBoot" title="Direct link to ESBoot" translate="no">​</a></h2>
<ul>
<li class="">Replace biome to eslint(antfu/eslint-config).</li>
<li class="">Upgrade node engine to 20.19.0.</li>
<li class=""><code>vite@5</code> =&gt; <code>vite@7</code>.</li>
<li class="">Upgrade <code>Bridge Mock@2</code></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="bundler">Bundler<a href="https://esboot.js.org/en/blog/esboot-4#bundler" class="hash-link" aria-label="Direct link to Bundler" title="Direct link to Bundler" translate="no">​</a></h2>
<ul>
<li class=""><code>px2rem</code> exclude <code>node_modules</code> by default</li>
<li class="">Support <a class="" href="https://esboot.js.org/en/docs/4.0/docs/config#assetsinlinelimit">assetsInlineLimit</a> configuration.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="bundler-webpack">Bundler-webpack<a href="https://esboot.js.org/en/blog/esboot-4#bundler-webpack" class="hash-link" aria-label="Direct link to Bundler-webpack" title="Direct link to Bundler-webpack" translate="no">​</a></h2>
<ul>
<li class="">feat: extraBabelIncludes support to absPath or npm pkg</li>
<li class="">fix: build time is 0</li>
<li class="">fix: tailwindcss not work after build by webpack</li>
<li class="">chore: support import x from x.scss</li>
<li class="">chore: Remove Webpackbar</li>
<li class="">chore: Change cjs to esm</li>
<li class="">chore: remove <code>postcss-normalize</code></li>
<li class="">chore: remove <code>postcss-flexbugs-fixes</code></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="bundler-vite">Bundler-vite<a href="https://esboot.js.org/en/blog/esboot-4#bundler-vite" class="hash-link" aria-label="Direct link to Bundler-vite" title="Direct link to Bundler-vite" translate="no">​</a></h2>
<ul>
<li class="">
<p>fix: Handle import * as variableName syntax</p>
</li>
<li class="">
<p>fix: <code>styleName</code> has a whitespace</p>
</li>
<li class="">
<p>fix: Scss file does not provide an export named <code>default</code></p>
</li>
<li class="">
<p>feat: Warning when not found styleName like webpack.</p>
</li>
<li class="">
<p>feat: <code>support tailwindcss@4</code></p>
</li>
<li class="">
<p>chore: Upgrade <code>vite-plugin-static-copy@2</code> to <code>@3</code></p>
</li>
<li class="">
<p>chore: Upgrade <code>vite@5</code> to <code>@7</code></p>
</li>
<li class="">
<p>chore: Upgrade <code>express@4</code> to <code>@5</code></p>
</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="tailwindcss-40">Tailwindcss 4.0<a href="https://esboot.js.org/en/blog/esboot-4#tailwindcss-40" class="hash-link" aria-label="Direct link to Tailwindcss 4.0" title="Direct link to Tailwindcss 4.0" translate="no">​</a></h2>
<p>Tailwindcss upgraded to <a href="https://tailwindcss.com/blog/tailwindcss-v4" target="_blank" rel="noopener noreferrer" class="">4.1</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="breaking-changes">Breaking Changes<a href="https://esboot.js.org/en/blog/esboot-4#breaking-changes" class="hash-link" aria-label="Direct link to Breaking Changes" title="Direct link to Breaking Changes" translate="no">​</a></h3>
<ul>
<li class="">Config file modified</li>
<li class="">Entry file modified</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_U7RI" id="changes-from-v3">Changes from v3<a href="https://esboot.js.org/en/blog/esboot-4#changes-from-v3" class="hash-link" aria-label="Direct link to Changes from v3" title="Direct link to Changes from v3" translate="no">​</a></h4>
<p>See <a href="https://tailwindcss.com/docs/upgrade-guide#changes-from-v3" target="_blank" rel="noopener noreferrer" class="">changes from v3</a></p>
<ul>
<li class="">Remove <code>@apply</code></li>
<li class="">Remove <code>@config</code></li>
<li class="">Remove <code>@variants</code></li>
<li class="">Remove <code>@responsive</code></li>
<li class="">Remove <code>@screen</code></li>
<li class="">Remove <code>@variants</code></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="browser">Browser<a href="https://esboot.js.org/en/blog/esboot-4#browser" class="hash-link" aria-label="Direct link to Browser" title="Direct link to Browser" translate="no">​</a></h2>
<ul>
<li class="">add <code>userAgent</code>, <code>isBrowser</code>, <code>isAndroid</code>, <code>isIos</code></li>
<li class="">add <code>createExternalConsole</code></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="browser-react">Browser-react<a href="https://esboot.js.org/en/blog/esboot-4#browser-react" class="hash-link" aria-label="Direct link to Browser-react" title="Direct link to Browser-react" translate="no">​</a></h2>
<ul>
<li class="">add <code>React Error boundary</code></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="eslint">ESLint<a href="https://esboot.js.org/en/blog/esboot-4#eslint" class="hash-link" aria-label="Direct link to ESLint" title="Direct link to ESLint" translate="no">​</a></h2>
<ul>
<li class="">Refactor config</li>
<li class=""><a class="" href="https://esboot.js.org/en/docs/4.0/docs/development/i18n#naming-convention">Restrict key naming in lang json</a></li>
<li class=""><code>8 =&gt; 9</code> / <a href="https://eslint.org/docs/latest/use/configure/configuration-files#flat-config" target="_blank" rel="noopener noreferrer" class="">flat config</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="stylelint">Stylelint<a href="https://esboot.js.org/en/blog/esboot-4#stylelint" class="hash-link" aria-label="Direct link to Stylelint" title="Direct link to Stylelint" translate="no">​</a></h2>
<ul>
<li class="">Refactor config</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="plugin-vue">Plugin-vue<a href="https://esboot.js.org/en/blog/esboot-4#plugin-vue" class="hash-link" aria-label="Direct link to Plugin-vue" title="Direct link to Plugin-vue" translate="no">​</a></h2>
<ul>
<li class="">Support vue projects, see <a class="" href="https://esboot.js.org/en/docs/4.0/docs/plugins/plugin-vue">Plugin-vue</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="template">Template<a href="https://esboot.js.org/en/blog/esboot-4#template" class="hash-link" aria-label="Direct link to Template" title="Direct link to Template" translate="no">​</a></h2>
<ul>
<li class="">React <code>18.3</code> =&gt; <a href="https://react.dev/blog/2025/10/01/react-19-2" target="_blank" rel="noopener noreferrer" class="">React 19.2</a></li>
<li class=""><code>@reduxjs/toolkit</code> to <code>Zustand</code></li>
<li class="">Upgrade to <code>bridge@3</code></li>
<li class="">Dynamic import lang</li>
<li class="">Improve Code Quality</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="website">Website<a href="https://esboot.js.org/en/blog/esboot-4#website" class="hash-link" aria-label="Direct link to Website" title="Direct link to Website" translate="no">​</a></h2>
<ul>
<li class="">Update UI</li>
<li class="">Add <code>Development</code> Docs section, like <code>i18n</code>/<code>css</code> etc.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="config">Config<a href="https://esboot.js.org/en/blog/esboot-4#config" class="hash-link" aria-label="Direct link to Config" title="Direct link to Config" translate="no">​</a></h2>
<ul>
<li class="">Remove <code>tailwindcssOptions</code></li>
<li class="">Add <a class="" href="https://esboot.js.org/en/docs/4.0/docs/config#assetsinlinelimit">assetsInlineLimit</a>.</li>
<li class="">React Compiler support</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="react-compiler-experimental-support">React Compiler Experimental Support<a href="https://esboot.js.org/en/blog/esboot-4#react-compiler-experimental-support" class="hash-link" aria-label="Direct link to React Compiler Experimental Support" title="Direct link to React Compiler Experimental Support" translate="no">​</a></h3>
<p>ESBoot v4 added experimental support for <a href="https://react.dev/learn/react-compiler" target="_blank" rel="noopener noreferrer" class="">React Compiler</a>. React Compiler is an automatic optimization tool from the React team, which can automatically perform memoization and other performance optimizations.</p>
<h4 class="anchor anchorTargetStickyNavbar_U7RI" id="configuration">Configuration<a href="https://esboot.js.org/en/blog/esboot-4#configuration" class="hash-link" aria-label="Direct link to Configuration" title="Direct link to Configuration" translate="no">​</a></h4>
<p>Add to config file:</p>
<div class="language-typescript codeBlockContainer_M9FV theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_JqZx"><pre tabindex="0" class="prism-code language-typescript codeBlock_mVWK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_cYzj"><div class="token-line" style="color:#393A34"><span class="token plain">experimental</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  reactCompiler</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    enable</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    target</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'19'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// or '18'</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="next-step">Next Step<a href="https://esboot.js.org/en/blog/esboot-4#next-step" class="hash-link" aria-label="Direct link to Next Step" title="Direct link to Next Step" translate="no">​</a></h2>
<p>Go to <a class="" href="https://esboot.js.org/en/docs/4.0/docs/roadmap">Roadmap</a> for more details.</p>]]></content>
        <author>
            <name>Roc</name>
        </author>
        <category label="Release" term="Release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[ESBoot 3]]></title>
        <id>https://esboot.js.org/en/blog/esboot-3</id>
        <link href="https://esboot.js.org/en/blog/esboot-3"/>
        <updated>2024-09-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Release ESBoot 3 note!]]></summary>
        <content type="html"><![CDATA[<p>Release ESBoot 3 note!</p>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="更新了什么">更新了什么<a href="https://esboot.js.org/en/blog/esboot-3#%E6%9B%B4%E6%96%B0%E4%BA%86%E4%BB%80%E4%B9%88" class="hash-link" aria-label="Direct link to 更新了什么" title="Direct link to 更新了什么" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="重构代码">重构代码<a href="https://esboot.js.org/en/blog/esboot-3#%E9%87%8D%E6%9E%84%E4%BB%A3%E7%A0%81" class="hash-link" aria-label="Direct link to 重构代码" title="Direct link to 重构代码" translate="no">​</a></h3>
<ul>
<li class="">更有扩展性的架构。</li>
<li class="">优化代码。</li>
<li class="">重构plugin机制。</li>
<li class="">添加更多feature。</li>
<li class="">根据v2经验移除部分过时feature。</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="支持多bundler">支持多Bundler<a href="https://esboot.js.org/en/blog/esboot-3#%E6%94%AF%E6%8C%81%E5%A4%9Abundler" class="hash-link" aria-label="Direct link to 支持多Bundler" title="Direct link to 支持多Bundler" translate="no">​</a></h3>
<ul>
<li class="">webpack的存档。</li>
<li class="">vite占有率的提升。</li>
<li class="">rust基建的兴起。</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="更新部分依赖到最新的稳定版本">更新部分依赖到最新的稳定版本<a href="https://esboot.js.org/en/blog/esboot-3#%E6%9B%B4%E6%96%B0%E9%83%A8%E5%88%86%E4%BE%9D%E8%B5%96%E5%88%B0%E6%9C%80%E6%96%B0%E7%9A%84%E7%A8%B3%E5%AE%9A%E7%89%88%E6%9C%AC" class="hash-link" aria-label="Direct link to 更新部分依赖到最新的稳定版本" title="Direct link to 更新部分依赖到最新的稳定版本" translate="no">​</a></h3>
<p>一年一更新，锁死版本。</p>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="更合理的代码结构">更合理的代码结构<a href="https://esboot.js.org/en/blog/esboot-3#%E6%9B%B4%E5%90%88%E7%90%86%E7%9A%84%E4%BB%A3%E7%A0%81%E7%BB%93%E6%9E%84" class="hash-link" aria-label="Direct link to 更合理的代码结构" title="Direct link to 更合理的代码结构" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="packages">packages<a href="https://esboot.js.org/en/blog/esboot-3#packages" class="hash-link" aria-label="Direct link to packages" title="Direct link to packages" translate="no">​</a></h3>
<div class="language-sh codeBlockContainer_M9FV theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_JqZx"><pre tabindex="0" class="prism-code language-sh codeBlock_mVWK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_cYzj"><div class="token-line" style="color:#393A34"><span class="token builtin class-name">.</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── bundler-common</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── bundler-rspack</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── bundler-vite</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── bundler-webpack</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── common</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── esboot</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── esboot-browser</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── eslint-plugin-esboot</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── lint</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── plugin-vitest</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">└── vscode-extension-esboot</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token number" style="color:#36acaa">12</span><span class="token plain"> directories.</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="bundlers">Bundlers<a href="https://esboot.js.org/en/blog/esboot-3#bundlers" class="hash-link" aria-label="Direct link to Bundlers" title="Direct link to Bundlers" translate="no">​</a></h3>
<ul>
<li class=""><code>bundler-common</code>: Bundler通用工具</li>
<li class=""><code>bundler-rspack</code>: Bundler Rspack</li>
<li class=""><code>bundler-vite</code>: Bundler Vite</li>
<li class=""><code>bundler-webpack</code>: Bundler Webpack</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="esboot">ESBoot<a href="https://esboot.js.org/en/blog/esboot-3#esboot" class="hash-link" aria-label="Direct link to ESBoot" title="Direct link to ESBoot" translate="no">​</a></h3>
<ul>
<li class=""><code>common</code>: esboot通用工具</li>
<li class=""><code>ESBoot</code>: 入口，注册cli，调用bundler</li>
<li class=""><code>esboot-browser</code>: 浏览器端工具</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="lint">Lint<a href="https://esboot.js.org/en/blog/esboot-3#lint" class="hash-link" aria-label="Direct link to Lint" title="Direct link to Lint" translate="no">​</a></h3>
<ul>
<li class=""><code>eslint-plugin-esboot</code>: eslint插件</li>
<li class=""><code>lint</code>: lint相关</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="plugin">Plugin<a href="https://esboot.js.org/en/blog/esboot-3#plugin" class="hash-link" aria-label="Direct link to Plugin" title="Direct link to Plugin" translate="no">​</a></h3>
<ul>
<li class=""><code>plugin-vitest</code>: vitest插件</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="other-tools">Other Tools<a href="https://esboot.js.org/en/blog/esboot-3#other-tools" class="hash-link" aria-label="Direct link to Other Tools" title="Direct link to Other Tools" translate="no">​</a></h3>
<ul>
<li class=""><code>vscode-extension-esboot</code>: vscode插件</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="bundler">Bundler<a href="https://esboot.js.org/en/blog/esboot-3#bundler" class="hash-link" aria-label="Direct link to Bundler" title="Direct link to Bundler" translate="no">​</a></h2>
<p>分析出一套常用的config，自定义配置使用<code>customConfig</code>。</p>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="webpack">webpack<a href="https://esboot.js.org/en/blog/esboot-3#webpack" class="hash-link" aria-label="Direct link to webpack" title="Direct link to webpack" translate="no">​</a></h3>
<p><code>100%</code></p>
<ul>
<li class="">实现v2的所有功能。</li>
<li class="">重新实现<code>langjsonpick</code>。</li>
<li class="">放弃<code>webpack-chain</code>。</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="vite">vite<a href="https://esboot.js.org/en/blog/esboot-3#vite" class="hash-link" aria-label="Direct link to vite" title="Direct link to vite" translate="no">​</a></h3>
<p><code>80%</code></p>
<ul>
<li class="">支持SPA</li>
<li class="">支持<code>styleName</code></li>
<li class="">平滑支持webapck配置。</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="rspack">rspack<a href="https://esboot.js.org/en/blog/esboot-3#rspack" class="hash-link" aria-label="Direct link to rspack" title="Direct link to rspack" translate="no">​</a></h3>
<ul>
<li class="">开发10%</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="项目文档">项目文档<a href="https://esboot.js.org/en/blog/esboot-3#%E9%A1%B9%E7%9B%AE%E6%96%87%E6%A1%A3" class="hash-link" aria-label="Direct link to 项目文档" title="Direct link to 项目文档" translate="no">​</a></h2>
<ul>
<li class="">基于v2 doc的使用设计为更简洁的doc设计。</li>
<li class="">更好看的主题。</li>
<li class="">添加changelog支持。</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="esboot-browser">ESBoot Browser<a href="https://esboot.js.org/en/blog/esboot-3#esboot-browser" class="hash-link" aria-label="Direct link to ESBoot Browser" title="Direct link to ESBoot Browser" translate="no">​</a></h2>
<p>增加<code>esboot-browser</code>包，封装常用的浏览器端工具。</p>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="esboot-文档更新">ESBoot 文档更新<a href="https://esboot.js.org/en/blog/esboot-3#esboot-%E6%96%87%E6%A1%A3%E6%9B%B4%E6%96%B0" class="hash-link" aria-label="Direct link to ESBoot 文档更新" title="Direct link to ESBoot 文档更新" translate="no">​</a></h2>
<ul>
<li class="">更合理的文档结构。</li>
<li class="">补充更多文档。</li>
<li class="">优先讲述ESBoot的立意。</li>
<li class="">添加最佳实践</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="依赖更新">依赖更新<a href="https://esboot.js.org/en/blog/esboot-3#%E4%BE%9D%E8%B5%96%E6%9B%B4%E6%96%B0" class="hash-link" aria-label="Direct link to 依赖更新" title="Direct link to 依赖更新" translate="no">​</a></h2>
<p>只记录大版本更新。</p>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="commander">commander<a href="https://esboot.js.org/en/blog/esboot-3#commander" class="hash-link" aria-label="Direct link to commander" title="Direct link to commander" translate="no">​</a></h3>
<ul>
<li class=""><code>Command 11.0.0 =&gt; 12.0.0</code></li>
</ul>
<p><a href="https://github.com/tj/commander.js/releases/tag/v12.0.0" target="_blank" rel="noopener noreferrer" class="">https://github.com/tj/commander.js/releases/tag/v12.0.0</a></p>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="webpack-dev-server">webpack-dev-server<a href="https://esboot.js.org/en/blog/esboot-3#webpack-dev-server" class="hash-link" aria-label="Direct link to webpack-dev-server" title="Direct link to webpack-dev-server" translate="no">​</a></h3>
<p><code>4 =&gt; 5</code></p>
<p>修改了好多api，https，http这种。</p>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="babel">babel<a href="https://esboot.js.org/en/blog/esboot-3#babel" class="hash-link" aria-label="Direct link to babel" title="Direct link to babel" translate="no">​</a></h3>
<ul>
<li class="">移除<a href="https://babeljs.io/docs/babel-plugin-syntax-dynamic-import" target="_blank" rel="noopener noreferrer" class="">@babel/plugin-syntax-dynamic-import</a></li>
</ul>
<p>This plugin is included in @babel/preset-env, in ES2020。</p>
<ul>
<li class="">移除<a href="https://www.npmjs.com/package/babel-plugin-transform-react-remove-prop-types" target="_blank" rel="noopener noreferrer" class="">babel-plugin-transform-react-remove-prop-types</a></li>
</ul>
<p>现在已经不用写prop type</p>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="husky">husky<a href="https://esboot.js.org/en/blog/esboot-3#husky" class="hash-link" aria-label="Direct link to husky" title="Direct link to husky" translate="no">​</a></h3>
<p>最新是9，改成了<code>husky init</code>命令，但是发现升级也没有什么用处，就懒得升级了，还是用8.</p>
<p>但是有个新的更新，<code>.husky</code>目录放到了<code>config</code>目录下，根目录又会少一个文件。</p>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="command">command<a href="https://esboot.js.org/en/blog/esboot-3#command" class="hash-link" aria-label="Direct link to command" title="Direct link to command" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="prepare">prepare<a href="https://esboot.js.org/en/blog/esboot-3#prepare" class="hash-link" aria-label="Direct link to prepare" title="Direct link to prepare" translate="no">​</a></h3>
<p><code>postinstall + g-alias</code> =&gt; <code>prepare</code></p>
<ul>
<li class=""><code>prepare</code>就是去生成一些lint规则、ts规则这些/husky安装。</li>
<li class=""><code>postinstall</code>有些语义不明。</li>
<li class=""><code>g-alias</code>是刚开始设计不全，只考虑了生成<code>alias</code>后面发现需要准备的东西越来越多。</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="exec_git_hooks">exec_git_hooks<a href="https://esboot.js.org/en/blog/esboot-3#exec_git_hooks" class="hash-link" aria-label="Direct link to exec_git_hooks" title="Direct link to exec_git_hooks" translate="no">​</a></h3>
<p><code>commitlint / lint-staged</code> =&gt; <code>exec_git_hooks</code></p>
<p>Git hooks的两个钩子命令更新。</p>
<ul>
<li class="">封装的更内敛，更语义化。</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="preview">preview<a href="https://esboot.js.org/en/blog/esboot-3#preview" class="hash-link" aria-label="Direct link to preview" title="Direct link to preview" translate="no">​</a></h3>
<ul>
<li class="">使用<code>pnpx</code>启动，代替直接下载包。</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="config">Config<a href="https://esboot.js.org/en/blog/esboot-3#config" class="hash-link" aria-label="Direct link to Config" title="Direct link to Config" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="移除环境变量esboot_project_type增加issp配置">移除环境变量<code>ESBOOT_PROJECT_TYPE</code>，增加<code>isSP</code>配置<a href="https://esboot.js.org/en/blog/esboot-3#%E7%A7%BB%E9%99%A4%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8Fesboot_project_type%E5%A2%9E%E5%8A%A0issp%E9%85%8D%E7%BD%AE" class="hash-link" aria-label="Direct link to 移除环境变量esboot_project_type增加issp配置" title="Direct link to 移除环境变量esboot_project_type增加issp配置" translate="no">​</a></h3>
<p>之间用来区分是<code>SP</code>还是<code>MP</code>，现在在<code>.esbootrc</code>中添加<code>isSP</code>配置。</p>
<p>原因：尽量减少环境变量，没有类型声明，可读性也不好。</p>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="更新jsminifiercssminifier">更新jsminifier/cssminifier<a href="https://esboot.js.org/en/blog/esboot-3#%E6%9B%B4%E6%96%B0jsminifiercssminifier" class="hash-link" aria-label="Direct link to 更新jsminifier/cssminifier" title="Direct link to 更新jsminifier/cssminifier" translate="no">​</a></h3>
<p>移除lightningcss/swc(build不需要那么快，反而下包要太久了)，固定用TerserPlugin和nano。(放弃webpack里使用rust，直接寻求vite或者rspack)。</p>
<ul>
<li class="">去掉了rust包因为发现对打包的时间其实并不敏感，反而对下包的时间敏感，而且配置使用的不多。</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="移除forktscheckerwebpackplugin">移除ForkTsCheckerWebpackPlugin<a href="https://esboot.js.org/en/blog/esboot-3#%E7%A7%BB%E9%99%A4forktscheckerwebpackplugin" class="hash-link" aria-label="Direct link to 移除ForkTsCheckerWebpackPlugin" title="Direct link to 移除ForkTsCheckerWebpackPlugin" translate="no">​</a></h3>
<ul>
<li class=""><code>ForkTsCheckerWebpackPlugin</code>因为激进的策略，所以几乎不会使用，所以实现后暂时移除。</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="customwebpack--customconfig"><code>customWebpack =&gt; customConfig</code><a href="https://esboot.js.org/en/blog/esboot-3#customwebpack--customconfig" class="hash-link" aria-label="Direct link to customwebpack--customconfig" title="Direct link to customwebpack--customconfig" translate="no">​</a></h3>
<p>现在有多个<code>bundler</code>，<code>customConfig</code>这个配置更抽象一些。</p>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="增加-minimize">增加 <code>minimize</code><a href="https://esboot.js.org/en/blog/esboot-3#%E5%A2%9E%E5%8A%A0-minimize" class="hash-link" aria-label="Direct link to 增加-minimize" title="Direct link to 增加-minimize" translate="no">​</a></h3>
<p>用来控制是否压缩代码。</p>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="增加-server-配置">增加 <code>server</code> 配置<a href="https://esboot.js.org/en/blog/esboot-3#%E5%A2%9E%E5%8A%A0-server-%E9%85%8D%E7%BD%AE" class="hash-link" aria-label="Direct link to 增加-server-配置" title="Direct link to 增加-server-配置" translate="no">​</a></h3>
<p>将<code>server</code>的配置独立出来，结构更清晰，包含<code>host</code>、<code>https</code>、<code>open</code>、<code>port</code>、<code>proxy</code>。</p>
<div class="language-ts codeBlockContainer_M9FV theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_JqZx"><pre tabindex="0" class="prism-code language-ts codeBlock_mVWK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_cYzj"><div class="token-line" style="color:#393A34"><span class="token plain">server</span><span class="token operator" style="color:#393A34">?</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  host</span><span class="token operator" style="color:#393A34">?</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">string</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  https</span><span class="token operator" style="color:#393A34">?</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">boolean</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  open</span><span class="token operator" style="color:#393A34">?</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">boolean</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  port</span><span class="token operator" style="color:#393A34">?</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token builtin">number</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  proxy</span><span class="token operator" style="color:#393A34">?</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> Proxy</span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="配置文件">配置文件<a href="https://esboot.js.org/en/blog/esboot-3#%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6" class="hash-link" aria-label="Direct link to 配置文件" title="Direct link to 配置文件" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="stylintconfig">stylintconfig<a href="https://esboot.js.org/en/blog/esboot-3#stylintconfig" class="hash-link" aria-label="Direct link to stylintconfig" title="Direct link to stylintconfig" translate="no">​</a></h3>
<ul>
<li class="">stylintconfig 地址修改，版本锁死</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="插件">插件<a href="https://esboot.js.org/en/blog/esboot-3#%E6%8F%92%E4%BB%B6" class="hash-link" aria-label="Direct link to 插件" title="Direct link to 插件" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="重构插件机制">重构插件机制<a href="https://esboot.js.org/en/blog/esboot-3#%E9%87%8D%E6%9E%84%E6%8F%92%E4%BB%B6%E6%9C%BA%E5%88%B6" class="hash-link" aria-label="Direct link to 重构插件机制" title="Direct link to 重构插件机制" translate="no">​</a></h3>
<p><code>240927</code></p>
<p>更合理的架构设计，更具扩展性的API。</p>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="内置支持tailwindcss">内置支持tailwindcss<a href="https://esboot.js.org/en/blog/esboot-3#%E5%86%85%E7%BD%AE%E6%94%AF%E6%8C%81tailwindcss" class="hash-link" aria-label="Direct link to 内置支持tailwindcss" title="Direct link to 内置支持tailwindcss" translate="no">​</a></h3>
<p><code>240810</code></p>
<p>tailwindcss刚开始抽成插件是因为只是一个实验性的功能，经过多个项目的实验发现很好用，所以v3版本内置支持。</p>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="工具">工具<a href="https://esboot.js.org/en/blog/esboot-3#%E5%B7%A5%E5%85%B7" class="hash-link" aria-label="Direct link to 工具" title="Direct link to 工具" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="添加vscode-extension-esboot">添加vscode-extension-esboot<a href="https://esboot.js.org/en/blog/esboot-3#%E6%B7%BB%E5%8A%A0vscode-extension-esboot" class="hash-link" aria-label="Direct link to 添加vscode-extension-esboot" title="Direct link to 添加vscode-extension-esboot" translate="no">​</a></h3>
<p>初步支持GUI操作环境变量，后续会添加更多功能(看情况)。</p>
<p>因为环境变量没有类型提示，但是某些情况很需要。但是现有的环境变量我都记不住，反正我记不住，特别是只想启动某些页面的时候。</p>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="eslint规则更新">ESLint规则更新<a href="https://esboot.js.org/en/blog/esboot-3#eslint%E8%A7%84%E5%88%99%E6%9B%B4%E6%96%B0" class="hash-link" aria-label="Direct link to ESLint规则更新" title="Direct link to ESLint规则更新" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="增加规则禁止引用非自己平台的代码">增加规则，禁止引用非自己平台的代码<a href="https://esboot.js.org/en/blog/esboot-3#%E5%A2%9E%E5%8A%A0%E8%A7%84%E5%88%99%E7%A6%81%E6%AD%A2%E5%BC%95%E7%94%A8%E9%9D%9E%E8%87%AA%E5%B7%B1%E5%B9%B3%E5%8F%B0%E7%9A%84%E4%BB%A3%E7%A0%81" class="hash-link" aria-label="Direct link to 增加规则，禁止引用非自己平台的代码" title="Direct link to 增加规则，禁止引用非自己平台的代码" translate="no">​</a></h3>
<p>已经提前在<code>esboot v2</code>上实现了。</p>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="移除hooks使用">移除Hooks使用<a href="https://esboot.js.org/en/blog/esboot-3#%E7%A7%BB%E9%99%A4hooks%E4%BD%BF%E7%94%A8" class="hash-link" aria-label="Direct link to 移除Hooks使用" title="Direct link to 移除Hooks使用" translate="no">​</a></h2>
<p>之前使用的<code>afterHooks</code>是一个没有经过深思熟虑的设计，在<code>v3</code>中移除。完全使用<code>plugin</code>机制替代。例如v2经常使用的</p>
<div class="language-ts codeBlockContainer_M9FV theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_JqZx"><pre tabindex="0" class="prism-code language-ts codeBlock_mVWK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_cYzj"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:#d73a49">afterHooks</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">cfg</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token builtin">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">Object</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">entries</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">cfg</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">_entry</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'&lt;-- cfg'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<p>在v3中，可以完全使用<code>plugin</code>机制替代。</p>
<p>For the migration guide, refer to the existing v3 docs here:</p>
<p><a class="" href="https://esboot.js.org/en/docs/3.0/docs/migration/migration-v3">Migrate to ESBoot 3</a></p>
<div class="language-ts codeBlockContainer_M9FV theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_JqZx"><pre tabindex="0" class="prism-code language-ts codeBlock_mVWK thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_cYzj"><div class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> defineConfig</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">type</span><span class="token plain"> </span><span class="token class-name">Configuration</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> PluginHooks </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'@dz-web/esboot'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">default</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">defineConfig</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  plugins</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      key</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'plugin-log'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">PluginHooks</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">afterCompile</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">cfg</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token builtin">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">cfg</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">entry</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="其他功能">其他功能<a href="https://esboot.js.org/en/blog/esboot-3#%E5%85%B6%E4%BB%96%E5%8A%9F%E8%83%BD" class="hash-link" aria-label="Direct link to 其他功能" title="Direct link to 其他功能" translate="no">​</a></h2>
<ul>
<li class=""><code>build</code>优化，<code>CI</code>环境禁止使用缓存、也不使用<code>webpackbar</code>。</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="待完成功能">待完成功能<a href="https://esboot.js.org/en/blog/esboot-3#%E5%BE%85%E5%AE%8C%E6%88%90%E5%8A%9F%E8%83%BD" class="hash-link" aria-label="Direct link to 待完成功能" title="Direct link to 待完成功能" translate="no">​</a></h2>
<ul class="contains-task-list containsTaskList_qOIb">
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->⭐️ 支持RSPack</li>
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->⭐️ 支持changelogs</li>
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->⭐️ 优化项目文档</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="feature">Feature<a href="https://esboot.js.org/en/blog/esboot-3#feature" class="hash-link" aria-label="Direct link to Feature" title="Direct link to Feature" translate="no">​</a></h3>
<ul class="contains-task-list containsTaskList_qOIb">
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->支持mock</li>
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->支持多端同时开发</li>
<li class="task-list-item"><input type="checkbox" disabled="" checked=""> <!-- -->扩展tailwind内置 cva和cn</li>
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->svgo配置</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="plugins">Plugins<a href="https://esboot.js.org/en/blog/esboot-3#plugins" class="hash-link" aria-label="Direct link to Plugins" title="Direct link to Plugins" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_U7RI" id="vitest">Vitest<a href="https://esboot.js.org/en/blog/esboot-3#vitest" class="hash-link" aria-label="Direct link to Vitest" title="Direct link to Vitest" translate="no">​</a></h4>
<ul class="contains-task-list containsTaskList_qOIb">
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->测试覆盖率</li>
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->多平台同步测试</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_U7RI" id="bugs">Bugs<a href="https://esboot.js.org/en/blog/esboot-3#bugs" class="hash-link" aria-label="Direct link to Bugs" title="Direct link to Bugs" translate="no">​</a></h3>
<ul class="contains-task-list containsTaskList_qOIb">
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->bug: tree-shaking失败</li>
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->bug: 物理缓存</li>
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->bug: mfsu-引入第三方css问题(antd-mobile的日期选择组件)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_U7RI" id="migrate-from-v2-to-v3">Migrate from v2 to v3<a href="https://esboot.js.org/en/blog/esboot-3#migrate-from-v2-to-v3" class="hash-link" aria-label="Direct link to Migrate from v2 to v3" title="Direct link to Migrate from v2 to v3" translate="no">​</a></h2>
<p>Refer to the existing v3 migration guide here: <a class="" href="https://esboot.js.org/en/docs/3.0/docs/migration/migration-v3">Migrate to ESBoot 3</a></p>]]></content>
        <author>
            <name>Roc</name>
        </author>
        <category label="Release" term="Release"/>
    </entry>
</feed>