<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>57uv6Z6g</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://loli.fj.cn/</id>
  <link href="https://loli.fj.cn/" rel="alternate"/>
  <link href="https://loli.fj.cn/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, 57uv6Z6g</rights>
  <subtitle>
    <![CDATA[MS4wLjABAAAA5qMD8Gzdcgq7HXUOviKB59i0-ybJ59jJvNzyaPt5XOsVNqP6DU7WLcoAXvdxvYdp💗<br><span style="color: red">本站所有文章仅作技术研究，请勿非法破坏，请遵守相关法律法规，后果自负</span>]]>
  </subtitle>
  <title>57uv6Z6g</title>
  <updated>2026-08-11T09:53:50.529Z</updated>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <category term="JavaScript" scheme="https://loli.fj.cn/tags/JavaScript/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Marked学习笔记</p><span id="more"></span><h2 id="Nodejs环境通过Marked转换Markdown源码"><a href="#Nodejs环境通过Marked转换Markdown源码" class="headerlink" title="Nodejs环境通过Marked转换Markdown源码"></a>Nodejs环境通过Marked转换Markdown源码</h2><h3 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install marked</span><br></pre></td></tr></table></figure><h3 id="转换Markdown源码为HTML代码"><a href="#转换Markdown源码为HTML代码" class="headerlink" title="转换Markdown源码为HTML代码"></a>转换Markdown源码为HTML代码</h3><figure class="highlight js"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> &#123; marked &#125; = <span class="built_in">require</span>(<span class="string">&quot;marked&quot;</span>);</span><br><span class="line"></span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="title function_">marked</span>(<span class="string">&quot;# 标题&quot;</span>));</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/08/11/Marked%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</id>
    <link href="https://loli.fj.cn/2026/08/11/Marked%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <published>2026-08-11T01:47:22.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Marked学习笔记</p>]]>
    </summary>
    <title>【笔记】Marked学习笔记</title>
    <updated>2026-08-11T09:53:50.529Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <category term="JavaScript" scheme="https://loli.fj.cn/tags/JavaScript/"/>
    <category term="Nodejs" scheme="https://loli.fj.cn/tags/Nodejs/"/>
    <category term="Webpack" scheme="https://loli.fj.cn/tags/Webpack/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Webpack通过<a href="/302.html?target=https://github.com/webpack/schema-utils">webpack&#x2F;schema-utils</a>实现Loader参数校验</p><span id="more"></span><h2 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -D schema-utils</span><br></pre></td></tr></table></figure><h2 id="定义Schema"><a href="#定义Schema" class="headerlink" title="定义Schema"></a>定义Schema</h2><figure class="highlight json"><figcaption><span>schemas/schema.json</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;object&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;properties&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;key&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;string&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;description&quot;</span><span class="punctuation">:</span> <span class="string">&quot;key的类型应当为string&quot;</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h2 id="创建Loader"><a href="#创建Loader" class="headerlink" title="创建Loader"></a>创建Loader</h2><figure class="highlight js"><figcaption><span>loaders/loader.js</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> &#123; validate &#125; = <span class="built_in">require</span>(<span class="string">&quot;schema-utils&quot;</span>);</span><br><span class="line"><span class="keyword">const</span> schema = <span class="built_in">require</span>(<span class="string">&quot;../schemas/schema.json&quot;</span>);</span><br><span class="line"></span><br><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> = <span class="keyword">function</span> (<span class="params">source</span>) &#123;</span><br><span class="line">  <span class="keyword">const</span> options = <span class="variable language_">this</span>.<span class="title function_">getOptions</span>();</span><br><span class="line">  <span class="title function_">validate</span>(schema, options);</span><br><span class="line">  <span class="keyword">return</span> source;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h2 id="使用自定义Loader"><a href="#使用自定义Loader" class="headerlink" title="使用自定义Loader"></a>使用自定义Loader</h2><figure class="highlight js"><figcaption><span>webpack.config.js</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> = &#123;</span><br><span class="line">  <span class="attr">module</span>: &#123;</span><br><span class="line">    <span class="attr">rules</span>: [</span><br><span class="line">      &#123;</span><br><span class="line">        <span class="attr">test</span>: <span class="regexp">/\.js$/</span>,</span><br><span class="line">        <span class="attr">use</span>: [</span><br><span class="line">          &#123;</span><br><span class="line">            <span class="attr">loader</span>: <span class="string">&quot;./loaders/loader.js&quot;</span>,</span><br><span class="line">            <span class="attr">options</span>: &#123;</span><br><span class="line">              <span class="attr">key</span>: <span class="string">&quot;value&quot;</span></span><br><span class="line">            &#125;</span><br><span class="line">          &#125;</span><br><span class="line">        ]</span><br><span class="line">      &#125;</span><br><span class="line">    ]</span><br><span class="line">  &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/08/10/Webpack%E9%80%9A%E8%BF%87schema-utils%E5%AE%9E%E7%8E%B0Loader%E5%8F%82%E6%95%B0%E6%A0%A1%E9%AA%8C/</id>
    <link href="https://loli.fj.cn/2026/08/10/Webpack%E9%80%9A%E8%BF%87schema-utils%E5%AE%9E%E7%8E%B0Loader%E5%8F%82%E6%95%B0%E6%A0%A1%E9%AA%8C/"/>
    <published>2026-08-10T05:47:37.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Webpack通过<a href="/302.html?target=https://github.com/webpack/schema-utils">webpack&#x2F;schema-utils</a>实现Loader参数校验</p>]]>
    </summary>
    <title>【笔记】Webpack通过schema-utils实现Loader参数校验</title>
    <updated>2026-08-11T09:53:50.572Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Webpack实现TreeShaking</p><span id="more"></span><h2 id="通过TerserWebpackPlugin对JS函数进行TreeShaking"><a href="#通过TerserWebpackPlugin对JS函数进行TreeShaking" class="headerlink" title="通过TerserWebpackPlugin对JS函数进行TreeShaking"></a>通过TerserWebpackPlugin对JS函数进行TreeShaking</h2><h3 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -D terser-webpack-plugin</span><br></pre></td></tr></table></figure><h3 id="修改配置文件"><a href="#修改配置文件" class="headerlink" title="修改配置文件"></a>修改配置文件</h3><blockquote><p><code>optimization.usedExports</code>：对从未使用的函数通过魔法函数<code>unused harmony export null</code>进行标记，Terser会自动忽略具有标记的函数的打包</p></blockquote><figure class="highlight js"><figcaption><span>webpack.config.js</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title class_">TerserPlugin</span> = <span class="built_in">require</span>(<span class="string">&quot;terser-webpack-plugin&quot;</span>);</span><br><span class="line"></span><br><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> = &#123;</span><br><span class="line">  <span class="attr">optimization</span>: &#123;</span><br><span class="line">    <span class="attr">usedExports</span>: <span class="literal">true</span></span><br><span class="line">  &#125;,</span><br><span class="line">  <span class="attr">minimize</span>: <span class="literal">true</span>,</span><br><span class="line">  <span class="attr">minimizer</span>: [</span><br><span class="line">    <span class="keyword">new</span> <span class="title class_">TerserPlugin</span>()</span><br><span class="line">  ]</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h2 id="通过PurgeCSSWebpackPlugin对CSS类进行TreeShaking"><a href="#通过PurgeCSSWebpackPlugin对CSS类进行TreeShaking" class="headerlink" title="通过PurgeCSSWebpackPlugin对CSS类进行TreeShaking"></a>通过PurgeCSSWebpackPlugin对CSS类进行TreeShaking</h2><h3 id="下载依赖-1"><a href="#下载依赖-1" class="headerlink" title="下载依赖"></a>下载依赖</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -D purgecss-webpack-plugin glob</span><br></pre></td></tr></table></figure><h3 id="修改配置文件-1"><a href="#修改配置文件-1" class="headerlink" title="修改配置文件"></a>修改配置文件</h3><figure class="highlight js"><figcaption><span>webpack.config.js</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title class_">TerserPlugin</span> = <span class="built_in">require</span>(<span class="string">&quot;purgecss-webpack-plugin&quot;</span>);</span><br><span class="line"><span class="keyword">const</span> glob = <span class="built_in">require</span>(<span class="string">&quot;glob&quot;</span>);</span><br><span class="line"></span><br><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> = &#123;</span><br><span class="line">  <span class="attr">plugins</span>: [</span><br><span class="line">    <span class="keyword">new</span> <span class="title class_">PurgecssPlugin</span>(&#123;</span><br><span class="line">      <span class="attr">paths</span>: glob.<span class="title function_">sync</span>(<span class="string">`<span class="subst">$&#123;path.resolve(__dirname, <span class="string">&quot;../src&quot;</span>)&#125;</span>/**/*`</span>, &#123; <span class="attr">nodir</span>: <span class="literal">true</span> &#125;),</span><br><span class="line">      <span class="attr">safelist</span>: <span class="keyword">function</span> (<span class="params"></span>) &#123;</span><br><span class="line">        <span class="keyword">return</span> &#123;</span><br><span class="line">          <span class="attr">standard</span>: [<span class="string">&quot;body&quot;</span>]</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;)</span><br><span class="line">  ]</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h2 id="配置TreeShaking的白名单"><a href="#配置TreeShaking的白名单" class="headerlink" title="配置TreeShaking的白名单"></a>配置TreeShaking的白名单</h2><ul><li><p>默认所有<code>import &quot;&quot;</code>导入但是没有使用的模块都会被TreeShaking</p></li><li><p>JS文件如果所有导出的模块都是纯函数，则无需配置或指定为false</p></li></ul><blockquote><p><code>sideEffects</code>：指定需要Webpack忽略TreeShaking的文件，缺省值为false，表示没有需要忽略TreeShaking的文件</p></blockquote><figure class="highlight json"><figcaption><span>package.json</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;sideEffects&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">false</span></span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><ul><li>JS文件如果导出的模块有非纯函数，具有副作用，则需要忽略这个JS文件的TreeShaking</li></ul><figure class="highlight json"><figcaption><span>package.json</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;sideEffects&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="string">&quot;./src/&lt;file&gt;.js&quot;</span></span><br><span class="line">  <span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><ul><li>忽略所有CSS文件的TreeShaking<ul><li>因为所有CSS文件的导入一定没有使用，都是<code>import &quot;&quot;</code>，所以需要忽略所有CSS文件的TreeShaking</li></ul></li></ul><figure class="highlight json"><figcaption><span>package.json</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;sideEffects&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">    <span class="string">&quot;*.css&quot;</span></span><br><span class="line">  <span class="punctuation">]</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/08/06/Webpack%E5%AE%9E%E7%8E%B0TreeShaking/</id>
    <link href="https://loli.fj.cn/2026/08/06/Webpack%E5%AE%9E%E7%8E%B0TreeShaking/"/>
    <published>2026-08-06T00:26:11.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Webpack实现TreeShaking</p>]]>
    </summary>
    <title>【笔记】Webpack实现TreeShaking</title>
    <updated>2026-08-11T09:53:50.571Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <category term="JavaScript" scheme="https://loli.fj.cn/tags/JavaScript/"/>
    <category term="Nodejs" scheme="https://loli.fj.cn/tags/Nodejs/"/>
    <category term="Webpack" scheme="https://loli.fj.cn/tags/Webpack/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Webpack通过WebpackBundleAnalyzer插件实现打包分析</p><span id="more"></span><h2 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -D webpack-bundle-analyzer</span><br></pre></td></tr></table></figure><h2 id="修改配置文件"><a href="#修改配置文件" class="headerlink" title="修改配置文件"></a>修改配置文件</h2><figure class="highlight js"><figcaption><span>webpack.config.js</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> &#123; <span class="title class_">BundleAnalyzerPlugin</span> &#125; = <span class="built_in">require</span>(<span class="string">&quot;webpack-bundle-analyzer&quot;</span>);</span><br><span class="line"></span><br><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> = &#123;</span><br><span class="line">  <span class="attr">plugins</span>: [</span><br><span class="line">    <span class="keyword">new</span> <span class="title class_">BundleAnalyzerPlugin</span>()</span><br><span class="line">  ]</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/08/05/Webpack%E7%9A%84WebpackBundleAnalyzer%E6%8F%92%E4%BB%B6/</id>
    <link href="https://loli.fj.cn/2026/08/05/Webpack%E7%9A%84WebpackBundleAnalyzer%E6%8F%92%E4%BB%B6/"/>
    <published>2026-08-05T22:19:52.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Webpack通过WebpackBundleAnalyzer插件实现打包分析</p>]]>
    </summary>
    <title>【笔记】Webpack的WebpackBundleAnalyzer插件</title>
    <updated>2026-08-11T09:53:50.572Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <category term="Python" scheme="https://loli.fj.cn/tags/Python/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>通过最后一位号码校验前面的号码是否有误，使用 Luhn 算法校验信用卡号</p><span id="more"></span><h2 id="源代码"><a href="#源代码" class="headerlink" title="源代码"></a>源代码</h2><figure class="highlight py"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># 在控制台获取一组信用卡号，允许号码中包含空格或连字符</span></span><br><span class="line">card_number = <span class="built_in">input</span>(<span class="string">&quot;请输入信用卡号：\n&quot;</span>).strip()</span><br><span class="line">card_number = card_number.replace(<span class="string">&quot; &quot;</span>, <span class="string">&quot;&quot;</span>).replace(<span class="string">&quot;-&quot;</span>, <span class="string">&quot;&quot;</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># 常见信用卡号为 13～19 位，并且每一位都必须是数字</span></span><br><span class="line"><span class="keyword">if</span> <span class="keyword">not</span> card_number.isdigit():</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">&quot;校验失败：信用卡号只能包含数字、空格或连字符&quot;</span>)</span><br><span class="line"><span class="keyword">elif</span> <span class="keyword">not</span> <span class="number">13</span> &lt;= <span class="built_in">len</span>(card_number) &lt;= <span class="number">19</span>:</span><br><span class="line">    <span class="built_in">print</span>(<span class="string">&quot;校验失败：信用卡号长度应为13～19位&quot;</span>)</span><br><span class="line"><span class="keyword">else</span>:</span><br><span class="line">    <span class="comment"># 将每一位字符转换为整数并放入列表</span></span><br><span class="line">    array = []</span><br><span class="line">    <span class="keyword">for</span> i <span class="keyword">in</span> card_number:</span><br><span class="line">        array.append(<span class="built_in">int</span>(i))</span><br><span class="line"></span><br><span class="line">    <span class="comment"># 从倒数第二位开始向左计算：每隔一位乘2，大于9则减9</span></span><br><span class="line">    total = <span class="number">0</span></span><br><span class="line">    <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">range</span>(<span class="built_in">len</span>(array) - <span class="number">2</span>, -<span class="number">1</span>, -<span class="number">1</span>):</span><br><span class="line">        number = array[i]</span><br><span class="line">        <span class="keyword">if</span> (<span class="built_in">len</span>(array) - <span class="number">2</span> - i) % <span class="number">2</span> == <span class="number">0</span>:</span><br><span class="line">            number *= <span class="number">2</span></span><br><span class="line">            <span class="keyword">if</span> number &gt; <span class="number">9</span>:</span><br><span class="line">                number -= <span class="number">9</span></span><br><span class="line">        total += number</span><br><span class="line"></span><br><span class="line">    <span class="comment"># 根据前面所有位计算最后一位应有的校验数字</span></span><br><span class="line">    check_digit = (<span class="number">10</span> - total % <span class="number">10</span>) % <span class="number">10</span></span><br><span class="line"></span><br><span class="line">    <span class="keyword">if</span> check_digit == array[-<span class="number">1</span>]:</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">&quot;校验成功&quot;</span>)</span><br><span class="line">    <span class="keyword">else</span>:</span><br><span class="line">        <span class="built_in">print</span>(<span class="string">&quot;校验失败&quot;</span>)</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2><h2 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h2><p><a href=""></a></p>]]>
    </content>
    <id>https://loli.fj.cn/2026/08/05/%E6%A0%A1%E9%AA%8C%E4%BF%A1%E7%94%A8%E5%8D%A1%E5%8F%B7%E7%A0%81/</id>
    <link href="https://loli.fj.cn/2026/08/05/%E6%A0%A1%E9%AA%8C%E4%BF%A1%E7%94%A8%E5%8D%A1%E5%8F%B7%E7%A0%81/"/>
    <published>2026-08-05T17:28:44.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>通过最后一位号码校验前面的号码是否有误，使用 Luhn 算法校验信用卡号</p>]]>
    </summary>
    <title>【代码】校验信用卡号码</title>
    <updated>2026-08-11T09:53:50.606Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <category term="JavaScript" scheme="https://loli.fj.cn/tags/JavaScript/"/>
    <category term="Nodejs" scheme="https://loli.fj.cn/tags/Nodejs/"/>
    <category term="Webpack" scheme="https://loli.fj.cn/tags/Webpack/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Webpack通过SpeedMesureWebpackPlugin插件实现测量构建速度</p><span id="more"></span><h2 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -D speed-measure-webpack-plugin</span><br></pre></td></tr></table></figure><h2 id="修改配置文件"><a href="#修改配置文件" class="headerlink" title="修改配置文件"></a>修改配置文件</h2><figure class="highlight js"><figcaption><span>webpack.config.js</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title class_">SpeedMeasureWebpackPlugin</span> = <span class="built_in">require</span>(<span class="string">&quot;speed-measure-webpack-plugin&quot;</span>);</span><br><span class="line"><span class="keyword">const</span> smp = <span class="keyword">new</span> <span class="title class_">SpeedMeasureWebpackPlugin</span>();</span><br><span class="line"></span><br><span class="line"><span class="keyword">const</span> config = &#123;</span><br><span class="line">  <span class="attr">plugins</span>: []</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> = <span class="keyword">function</span> (<span class="params">env</span>) &#123;</span><br><span class="line">  <span class="keyword">return</span> smp.<span class="title function_">wrap</span>(config);</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/08/04/Webpack%E7%9A%84SpeedMesureWebpackPlugin%E6%8F%92%E4%BB%B6/</id>
    <link href="https://loli.fj.cn/2026/08/04/Webpack%E7%9A%84SpeedMesureWebpackPlugin%E6%8F%92%E4%BB%B6/"/>
    <published>2026-08-04T21:34:35.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Webpack通过SpeedMesureWebpackPlugin插件实现测量构建速度</p>]]>
    </summary>
    <title>【笔记】Webpack的SpeedMesureWebpackPlugin插件</title>
    <updated>2026-08-11T09:53:50.572Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Codex配置Brave浏览器的MCP</p><span id="more"></span><h2 id="准备工作"><a href="#准备工作" class="headerlink" title="准备工作"></a>准备工作</h2><ul><li>Brave浏览器</li></ul><h2 id="通过调试模式启动浏览器"><a href="#通过调试模式启动浏览器" class="headerlink" title="通过调试模式启动浏览器"></a>通过调试模式启动浏览器</h2><h3 id="Windows"><a href="#Windows" class="headerlink" title="Windows"></a>Windows</h3><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&quot;C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe&quot; --remote-debugging-port=<span class="number">9222</span></span><br></pre></td></tr></table></figure><h3 id="MacOS"><a href="#MacOS" class="headerlink" title="MacOS"></a>MacOS</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">open -a &quot;Brave Browser&quot; --args --remote-debugging-port=9222</span><br></pre></td></tr></table></figure><h2 id="Codex添加MCP配置"><a href="#Codex添加MCP配置" class="headerlink" title="Codex添加MCP配置"></a>Codex添加MCP配置</h2><h3 id="通过命令配置"><a href="#通过命令配置" class="headerlink" title="通过命令配置"></a>通过命令配置</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">codex mcp add brave -- npx -y brave-mcp@latest --browser-url http://127.0.0.1:9222</span><br></pre></td></tr></table></figure><h3 id="通过配置文件配置"><a href="#通过配置文件配置" class="headerlink" title="通过配置文件配置"></a>通过配置文件配置</h3><figure class="highlight toml"><figcaption><span>~/.codex/config.toml</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[mcp_servers.brave]</span></span><br><span class="line"><span class="attr">command</span> = <span class="string">&quot;npx&quot;</span></span><br><span class="line"><span class="attr">args</span> = [<span class="string">&quot;-y&quot;</span>, <span class="string">&quot;brave-mcp@latest&quot;</span>, <span class="string">&quot;--browserUrl&quot;</span>, <span class="string">&quot;http://127.0.0.1:9222&quot;</span>]</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/08/04/Codex%E9%85%8D%E7%BD%AEBrave%E6%B5%8F%E8%A7%88%E5%99%A8%E7%9A%84MCP/</id>
    <link href="https://loli.fj.cn/2026/08/04/Codex%E9%85%8D%E7%BD%AEBrave%E6%B5%8F%E8%A7%88%E5%99%A8%E7%9A%84MCP/"/>
    <published>2026-08-04T01:38:30.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Codex配置Brave浏览器的MCP</p>]]>
    </summary>
    <title>【笔记】Codex配置Brave浏览器的MCP</title>
    <updated>2026-08-11T09:53:50.478Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <category term="JavaScript" scheme="https://loli.fj.cn/tags/JavaScript/"/>
    <category term="Nodejs" scheme="https://loli.fj.cn/tags/Nodejs/"/>
    <category term="Webpack" scheme="https://loli.fj.cn/tags/Webpack/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Webpack通过CSSMinimizerWebpackPlugin插件实现简化CSS代码</p><span id="more"></span><h2 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -D css-minimizer-webpack-plugin</span><br></pre></td></tr></table></figure><h2 id="修改配置文件"><a href="#修改配置文件" class="headerlink" title="修改配置文件"></a>修改配置文件</h2><blockquote><p><code>parallel</code>：是否使用多线程构建，缺省值为true表示使用多线程构建</p></blockquote><figure class="highlight js"><figcaption><span>webpack.config.js</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> <span class="title class_">CSSMinimizerWebpackPlugin</span> = <span class="built_in">require</span>(<span class="string">&quot;css-minimizer-webpack-plugin&quot;</span>);</span><br><span class="line"></span><br><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> = &#123;</span><br><span class="line">  <span class="attr">optimization</span>: &#123;</span><br><span class="line">    <span class="attr">minimize</span>: <span class="literal">true</span>,</span><br><span class="line">    <span class="attr">minimizer</span>: [</span><br><span class="line">      <span class="keyword">new</span> <span class="title class_">CSSMinimizerWebpackPlugin</span>(&#123;</span><br><span class="line">        <span class="attr">parallel</span>: <span class="literal">true</span></span><br><span class="line">      &#125;)</span><br><span class="line">    ]</span><br><span class="line">  &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/08/04/Webpack%E7%9A%84CSSMinimizerWebpackPlugin%E6%8F%92%E4%BB%B6/</id>
    <link href="https://loli.fj.cn/2026/08/04/Webpack%E7%9A%84CSSMinimizerWebpackPlugin%E6%8F%92%E4%BB%B6/"/>
    <published>2026-08-04T01:08:21.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Webpack通过CSSMinimizerWebpackPlugin插件实现简化CSS代码</p>]]>
    </summary>
    <title>【笔记】Webpack的CSSMinimizerWebpackPlugin插件</title>
    <updated>2026-08-11T09:53:50.571Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Fast and simple Node.js version manager, built in Rust（<a href="/302.html?target=https://github.com/Schniz/fnm">Github</a>）</p><p>fnm学习笔记</p><span id="more"></span><h2 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h2><h3 id="MacOS"><a href="#MacOS" class="headerlink" title="MacOS"></a>MacOS</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">brew install fnm</span><br></pre></td></tr></table></figure><ul><li>添加环境变量</li></ul><figure class="highlight shell"><figcaption><span>~/.zshrc</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">eval &quot;$(fnm env --use-on-cd)&quot;</span><br></pre></td></tr></table></figure><h2 id="Nodejs版本管理"><a href="#Nodejs版本管理" class="headerlink" title="Nodejs版本管理"></a>Nodejs版本管理</h2><h3 id="安装指定的版本"><a href="#安装指定的版本" class="headerlink" title="安装指定的版本"></a>安装指定的版本</h3><blockquote><p><code>&lt;version&gt;</code>：版本号</p></blockquote><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">fnm install &lt;version&gt;</span><br></pre></td></tr></table></figure><h4 id="安装最新版"><a href="#安装最新版" class="headerlink" title="安装最新版"></a>安装最新版</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">fnm install --latest</span><br></pre></td></tr></table></figure><h4 id="安装最新LTS版"><a href="#安装最新LTS版" class="headerlink" title="安装最新LTS版"></a>安装最新LTS版</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">fnm install --lts</span><br></pre></td></tr></table></figure><h3 id="卸载指定的版本"><a href="#卸载指定的版本" class="headerlink" title="卸载指定的版本"></a>卸载指定的版本</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">fnm uninstall &lt;version&gt;</span><br></pre></td></tr></table></figure><h3 id="查看所有可以安装的版本"><a href="#查看所有可以安装的版本" class="headerlink" title="查看所有可以安装的版本"></a>查看所有可以安装的版本</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">fnm list-remote</span><br></pre></td></tr></table></figure><h4 id="查看所有可以安装的LTS版"><a href="#查看所有可以安装的LTS版" class="headerlink" title="查看所有可以安装的LTS版"></a>查看所有可以安装的LTS版</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">fnm list-remote --lts</span><br></pre></td></tr></table></figure><h3 id="查看已安装的版本"><a href="#查看已安装的版本" class="headerlink" title="查看已安装的版本"></a>查看已安装的版本</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">fnm ls</span><br></pre></td></tr></table></figure><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">fnm list</span><br></pre></td></tr></table></figure><h3 id="切换当前使用的版本"><a href="#切换当前使用的版本" class="headerlink" title="切换当前使用的版本"></a>切换当前使用的版本</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">fnm use &lt;version&gt;</span><br></pre></td></tr></table></figure><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">fnm use --latest</span><br></pre></td></tr></table></figure><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">fnm use --lts</span><br></pre></td></tr></table></figure><h3 id="查看当前使用的版本"><a href="#查看当前使用的版本" class="headerlink" title="查看当前使用的版本"></a>查看当前使用的版本</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">fnm current</span><br></pre></td></tr></table></figure><h3 id="当前项目锁定版本"><a href="#当前项目锁定版本" class="headerlink" title="当前项目锁定版本"></a>当前项目锁定版本</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">fnm local &lt;version&gt;</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/08/02/FastNodeManager%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</id>
    <link href="https://loli.fj.cn/2026/08/02/FastNodeManager%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <published>2026-08-02T08:30:36.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Fast and simple Node.js version manager, built in Rust（<a href="/302.html?target=https://github.com/Schniz/fnm">Github</a>）</p>
<p>fnm学习笔记</p>]]>
    </summary>
    <title>【笔记】FastNodeManager学习笔记</title>
    <updated>2026-08-11T09:53:50.486Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <category term="JavaScript" scheme="https://loli.fj.cn/tags/JavaScript/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>A JavaScript mangler&#x2F;compressor toolkit for ES6+.（<a href="/302.html?target=https://github.com/terser/terser">Github</a>）</p><span id="more"></span><h2 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -D terser</span><br></pre></td></tr></table></figure><h2 id="压缩并丑化JS文件"><a href="#压缩并丑化JS文件" class="headerlink" title="压缩并丑化JS文件"></a>压缩并丑化JS文件</h2><blockquote><p><code>-c key1=value,key2=value</code>：打包参数，多个参数用<code>,</code>分隔</p><blockquote><p><code>arrows=true</code>：转换为箭头函数代替普通函数<br><code>arguments=true</code>：转换为使用<code>arguments</code>代替形参读取<br><code>dead_code=true</code>：忽略不可达代码的打包</p></blockquote><p><code>-m key1=value,key2=value</code>：代码优化参数</p><blockquote><p><code>toplevel=true</code>：顶层变量名优化为简短字符串<br><code>keep_fnames=true</code>：不优化函数名<br><code>keep_classnames=true</code>：不优化类名</p></blockquote></blockquote><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">terser &lt;file&gt;.js -o &lt;file&gt;.min.js</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/31/Terser%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</id>
    <link href="https://loli.fj.cn/2026/07/31/Terser%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <published>2026-07-31T06:20:09.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>A JavaScript mangler&#x2F;compressor toolkit for ES6+.（<a href="/302.html?target=https://github.com/terser/terser">Github</a>）</p>]]>
    </summary>
    <title>【笔记】Terser学习笔记</title>
    <updated>2026-08-11T09:53:50.565Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <category term="Github" scheme="https://loli.fj.cn/tags/Github/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Codex配置Wireshark的MCP</p><span id="more"></span><h2 id="下载项目"><a href="#下载项目" class="headerlink" title="下载项目"></a>下载项目</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">git clone https://github.com/bx33661/Wireshark-MCP.git</span><br><span class="line">cd Wireshark-MCP</span><br></pre></td></tr></table></figure><h2 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">brew install uv</span><br><span class="line">uv sync</span><br></pre></td></tr></table></figure><h2 id="Codex添加MCP配置"><a href="#Codex添加MCP配置" class="headerlink" title="Codex添加MCP配置"></a>Codex添加MCP配置</h2><blockquote><p><code>/Wireshark-MCP</code>：<code>Wireshark-MCP</code>项目的绝对路径</p></blockquote><h3 id="通过命令配置"><a href="#通过命令配置" class="headerlink" title="通过命令配置"></a>通过命令配置</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">codex mcp add wireshark --cwd /Wireshark-MCP -- /opt/homebrew/bin/uv run -m wireshark_mcp</span><br></pre></td></tr></table></figure><h3 id="通过配置文件配置"><a href="#通过配置文件配置" class="headerlink" title="通过配置文件配置"></a>通过配置文件配置</h3><figure class="highlight toml"><figcaption><span>~/.codex/config.toml</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[mcp_servers.wireshark]</span></span><br><span class="line"><span class="attr">transport</span> = <span class="string">&quot;stdio&quot;</span></span><br><span class="line"><span class="attr">cwd</span> = <span class="string">&quot;/Wireshark-MCP&quot;</span></span><br><span class="line"><span class="attr">command</span> = <span class="string">&quot;/opt/homebrew/bin/uv&quot;</span></span><br><span class="line"><span class="attr">args</span> = [<span class="string">&quot;run&quot;</span>, <span class="string">&quot;-m&quot;</span>, <span class="string">&quot;wireshark_mcp&quot;</span>]</span><br></pre></td></tr></table></figure><h4 id="手动指定可执行文件位置"><a href="#手动指定可执行文件位置" class="headerlink" title="手动指定可执行文件位置"></a>手动指定可执行文件位置</h4><figure class="highlight toml"><figcaption><span>~/.codex/config.toml</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[mcp_servers.wireshark-mcp.env]</span></span><br><span class="line"><span class="attr">PYTHONIOENCODING</span> = <span class="string">&quot;utf-8&quot;</span></span><br><span class="line"><span class="attr">PYTHONUNBUFFERED</span> = <span class="string">&quot;1&quot;</span></span><br><span class="line"><span class="attr">WIRESHARK_MCP_TSHARK_PATH</span> = <span class="string">&quot;/opt/homebrew/bin/tshark&quot;</span></span><br><span class="line"><span class="attr">WIRESHARK_MCP_CAPINFOS_PATH</span> = <span class="string">&quot;/opt/homebrew/bin/capinfos&quot;</span></span><br><span class="line"><span class="attr">WIRESHARK_MCP_MERGECAP_PATH</span> = <span class="string">&quot;/opt/homebrew/bin/mergecap&quot;</span></span><br><span class="line"><span class="attr">WIRESHARK_MCP_EDITCAP_PATH</span> = <span class="string">&quot;/opt/homebrew/bin/editcap&quot;</span></span><br><span class="line"><span class="attr">WIRESHARK_MCP_DUMPCAP_PATH</span> = <span class="string">&quot;/opt/homebrew/bin/dumpcap&quot;</span></span><br><span class="line"><span class="attr">WIRESHARK_MCP_TEXT2PCAP_PATH</span> = <span class="string">&quot;/opt/homebrew/bin/text2pcap&quot;</span></span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/28/Codex%E9%85%8D%E7%BD%AEWireshark%E7%9A%84MCP/</id>
    <link href="https://loli.fj.cn/2026/07/28/Codex%E9%85%8D%E7%BD%AEWireshark%E7%9A%84MCP/"/>
    <published>2026-07-28T20:59:50.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Codex配置Wireshark的MCP</p>]]>
    </summary>
    <title>【笔记】Codex配置Wireshark的MCP</title>
    <updated>2026-08-11T09:53:50.478Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <category term="Github" scheme="https://loli.fj.cn/tags/Github/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Codex配置Unity的MCP</p><span id="more"></span><h2 id="Unity中安装插件"><a href="#Unity中安装插件" class="headerlink" title="Unity中安装插件"></a>Unity中安装插件</h2><ul><li>打开Unity-&gt;<code>Window</code>-&gt;<code>Package Management</code>-&gt;<code>Package Manager</code></li></ul><p><img src="/../images/20260729035713/01.webp"></p><ul><li><code>+</code>-&gt;<code>Install package from git URL</code></li></ul><p><img src="/../images/20260729035713/02.webp"></p><ul><li>输入<code>https://github.com/CoplayDev/unity-mcp.git?path=/MCPForUnity#v10.0.0</code>-&gt;<code>Install</code></li></ul><p><img src="/../images/20260729035713/03.webp"></p><ul><li><code>Done</code></li></ul><p><img src="/../images/20260729035713/04.webp"></p><ul><li><code>Skip</code></li></ul><p><img src="/../images/20260729035713/05.webp"></p><h2 id="Unity中启动MCP服务"><a href="#Unity中启动MCP服务" class="headerlink" title="Unity中启动MCP服务"></a>Unity中启动MCP服务</h2><ul><li>打开Unity-&gt;<code>Window</code>-&gt;<code>MCP for Unity</code>-&gt;<code>Toggle MCP Window</code>-&gt;<code>Start Server</code></li></ul><p><img src="/../images/20260729035713/06.webp"></p><ul><li><code>OK</code></li></ul><p><img src="/../images/20260729035713/07.webp"></p><h2 id="Codex添加MCP配置"><a href="#Codex添加MCP配置" class="headerlink" title="Codex添加MCP配置"></a>Codex添加MCP配置</h2><ul><li>打开Unity-&gt;<code>Window</code>-&gt;<code>MCP for Unity</code>-&gt;<code>Toggle MCP Window</code>-&gt;<code>Configure All Detected Clients</code></li></ul><p><img src="/../images/20260729035713/08.webp"></p><ul><li><code>OK</code></li></ul><p><img src="/../images/20260729035713/09.webp"></p><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/28/Codex%E9%85%8D%E7%BD%AEUnity%E7%9A%84MCP/</id>
    <link href="https://loli.fj.cn/2026/07/28/Codex%E9%85%8D%E7%BD%AEUnity%E7%9A%84MCP/"/>
    <published>2026-07-28T19:57:13.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Codex配置Unity的MCP</p>]]>
    </summary>
    <title>【笔记】Codex配置Unity的MCP</title>
    <updated>2026-08-11T09:53:50.478Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <category term="Github" scheme="https://loli.fj.cn/tags/Github/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Codex配置Blender的MCP</p><span id="more"></span><h2 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">brew install uv</span><br></pre></td></tr></table></figure><h2 id="Blender中安装插件"><a href="#Blender中安装插件" class="headerlink" title="Blender中安装插件"></a>Blender中安装插件</h2><ul><li>下载插件</li></ul><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget https://raw.githubusercontent.com/ahujasid/blender-mcp/refs/heads/main/addon.py</span><br></pre></td></tr></table></figure><ul><li>打开Blender-&gt;<code>编辑</code>-&gt;<code>偏好设置</code>-&gt;<code>插件</code>-&gt;展开菜单-&gt;<code>从磁盘安装</code>-&gt;选择上一步骤下载的<code>addon.py</code></li></ul><p><img src="/../images/20260729035205/01.webp"></p><h2 id="Blender中启动MCP服务"><a href="#Blender中启动MCP服务" class="headerlink" title="Blender中启动MCP服务"></a>Blender中启动MCP服务</h2><ul><li>打开Blender-&gt;在3D时图中按<code>N</code>打开右侧栏-&gt;<code>Blender MCP</code>-&gt;<code>Connect to MCP Server</code></li></ul><p><img src="/../images/20260729035205/02.webp"></p><h2 id="Codex添加MCP配置"><a href="#Codex添加MCP配置" class="headerlink" title="Codex添加MCP配置"></a>Codex添加MCP配置</h2><h3 id="通过命令配置"><a href="#通过命令配置" class="headerlink" title="通过命令配置"></a>通过命令配置</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">codex mcp add blender -- /opt/homebrew/bin/uvx --python 3.11 blender-mcp</span><br></pre></td></tr></table></figure><h3 id="通过配置文件配置"><a href="#通过配置文件配置" class="headerlink" title="通过配置文件配置"></a>通过配置文件配置</h3><figure class="highlight toml"><figcaption><span>~/.codex/config.toml</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[mcp_servers.blender]</span></span><br><span class="line"><span class="attr">type</span> = <span class="string">&quot;stdio&quot;</span></span><br><span class="line"><span class="attr">command</span> = <span class="string">&quot;/opt/homebrew/bin/uvx&quot;</span></span><br><span class="line"><span class="attr">args</span> = [<span class="string">&quot;--python&quot;</span>, <span class="string">&quot;3.11&quot;</span>, <span class="string">&quot;blender-mcp&quot;</span>]</span><br><span class="line"><span class="attr">startup_timeout_ms</span> = <span class="number">30000</span></span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/28/Codex%E9%85%8D%E7%BD%AEBlender%E7%9A%84MCP/</id>
    <link href="https://loli.fj.cn/2026/07/28/Codex%E9%85%8D%E7%BD%AEBlender%E7%9A%84MCP/"/>
    <published>2026-07-28T19:52:05.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Codex配置Blender的MCP</p>]]>
    </summary>
    <title>【笔记】Codex配置Blender的MCP</title>
    <updated>2026-08-11T09:53:50.478Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Codex配置IDEA的MCP</p><span id="more"></span><h2 id="IDEA中安装插件"><a href="#IDEA中安装插件" class="headerlink" title="IDEA中安装插件"></a>IDEA中安装插件</h2><ul><li>打开IDEA-&gt;<code>Settings</code>-&gt;<code>Plugins</code>-&gt;搜索并安装<code>MCP Server</code></li></ul><p><img src="/../images/20260729034859/01.webp"></p><h2 id="IDEA中启动MCP服务"><a href="#IDEA中启动MCP服务" class="headerlink" title="IDEA中启动MCP服务"></a>IDEA中启动MCP服务</h2><ul><li>打开IDEA-&gt;<code>Settings</code>-&gt;<code>Tools</code>-&gt;<code>MCP Server</code>-&gt;勾选<code>Enable MCP Server</code>-&gt;<code>Enable</code>-&gt;<code>OK</code></li></ul><p><img src="/../images/20260729034859/02.webp"></p><h2 id="修改Codex配置文件"><a href="#修改Codex配置文件" class="headerlink" title="修改Codex配置文件"></a>修改Codex配置文件</h2><h3 id="通过配置文件配置"><a href="#通过配置文件配置" class="headerlink" title="通过配置文件配置"></a>通过配置文件配置</h3><h4 id="以HTTP的形式"><a href="#以HTTP的形式" class="headerlink" title="以HTTP的形式"></a>以HTTP的形式</h4><figure class="highlight toml"><figcaption><span>~/.codex/config.toml</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[mcp_servers.idea]</span></span><br><span class="line"><span class="attr">url</span> = <span class="string">&quot;http://127.0.0.1:64342/stream&quot;</span></span><br></pre></td></tr></table></figure><h4 id="以进程的形式"><a href="#以进程的形式" class="headerlink" title="以进程的形式"></a>以进程的形式</h4><figure class="highlight toml"><figcaption><span>~/.codex/config.toml</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">[mcp_servers.idea]</span></span><br><span class="line"><span class="attr">command</span> = <span class="string">&quot;/Applications/IntelliJ IDEA.app/Contents/jbr/Contents/Home/bin/java&quot;</span></span><br><span class="line"><span class="attr">args</span> = [</span><br><span class="line">  <span class="string">&quot;-classpath&quot;</span>,</span><br><span class="line">  <span class="string">&quot;/Applications/IntelliJ IDEA.app/Contents/plugins/mcpserver/lib/mcpserver-frontend.jar:/Applications/IntelliJ IDEA.app/Contents/lib/util-8.jar:/Applications/IntelliJ IDEA.app/Contents/lib/module-intellij.libraries.ktor.client.cio.jar:/Applications/IntelliJ IDEA.app/Contents/lib/module-intellij.libraries.ktor.client.jar:/Applications/IntelliJ IDEA.app/Contents/lib/module-intellij.libraries.ktor.network.tls.jar:/Applications/IntelliJ IDEA.app/Contents/lib/module-intellij.libraries.ktor.io.jar:/Applications/IntelliJ IDEA.app/Contents/lib/module-intellij.libraries.ktor.utils.jar:/Applications/IntelliJ IDEA.app/Contents/lib/module-intellij.libraries.kotlinx.io.jar:/Applications/IntelliJ IDEA.app/Contents/lib/module-intellij.libraries.kotlinx.serialization.core.jar:/Applications/IntelliJ IDEA.app/Contents/lib/module-intellij.libraries.kotlinx.serialization.json.jar&quot;</span>,</span><br><span class="line">  <span class="string">&quot;com.intellij.mcpserver.stdio.McpStdioRunnerKt&quot;</span>,</span><br><span class="line">]</span><br><span class="line"><span class="attr">env</span> = &#123; IJ_MCP_SERVER_PORT = <span class="string">&quot;64342&quot;</span> &#125;</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/28/Codex%E9%85%8D%E7%BD%AEIDEA%E7%9A%84MCP/</id>
    <link href="https://loli.fj.cn/2026/07/28/Codex%E9%85%8D%E7%BD%AEIDEA%E7%9A%84MCP/"/>
    <published>2026-07-28T19:48:59.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Codex配置IDEA的MCP</p>]]>
    </summary>
    <title>【笔记】Codex配置IDEA的MCP</title>
    <updated>2026-08-11T09:53:50.478Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Shared browser compatibility config for popular JavaScript tools like Autoprefixer, Babel, ESLint, PostCSS, and Webpack（<a href="/302.html?target=https://browsersl.ist/">官网</a>）</p><span id="more"></span><h2 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -D browserslist</span><br></pre></td></tr></table></figure><h2 id="获取需要兼容的浏览器版本"><a href="#获取需要兼容的浏览器版本" class="headerlink" title="获取需要兼容的浏览器版本"></a>获取需要兼容的浏览器版本</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npx browserslist</span><br></pre></td></tr></table></figure><h2 id="添加需要兼容的浏览器配置"><a href="#添加需要兼容的浏览器配置" class="headerlink" title="添加需要兼容的浏览器配置"></a>添加需要兼容的浏览器配置</h2><h3 id="通过命令添加配置"><a href="#通过命令添加配置" class="headerlink" title="通过命令添加配置"></a>通过命令添加配置</h3><ul><li>多个浏览器版本配置用<code>and</code>或<code>,</code>分隔，表示并且关系</li></ul><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npx browserslist &quot;&gt; 0.5% and last 2 versions and Firefox ESR and not dead&quot;</span><br></pre></td></tr></table></figure><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npx browserslist &quot;&gt; 0.5%, last 2 versions, Firefox ESR, not dead&quot;</span><br></pre></td></tr></table></figure><ul><li>多个浏览器版本配置用<code>or</code>分隔，表示或者关系</li></ul><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npx browserslist &quot;&gt; 0.5% or last 2 versions or Firefox ESR or not dead&quot;</span><br></pre></td></tr></table></figure><ul><li>通过<code>not</code>表示非关系</li></ul><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npx browserslist &quot;not dead&quot;</span><br></pre></td></tr></table></figure><h3 id="直接修改配置文件"><a href="#直接修改配置文件" class="headerlink" title="直接修改配置文件"></a>直接修改配置文件</h3><ul><li>每个浏览器版本配置占一行，表示或者关系</li></ul><figure class="highlight ini"><figcaption><span>.browserslistrc</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&gt; 0.5%</span><br><span class="line">last 2 versions</span><br><span class="line">Firefox ESR</span><br><span class="line">not dead</span><br></pre></td></tr></table></figure><h2 id="在Webpack-Babel中使用Browserslist"><a href="#在Webpack-Babel中使用Browserslist" class="headerlink" title="在Webpack+Babel中使用Browserslist"></a>在Webpack+Babel中使用Browserslist</h2><figure class="highlight js"><figcaption><span>webpack.config.js</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="variable language_">module</span>.<span class="property">exports</span> = &#123;</span><br><span class="line">  <span class="attr">module</span>: &#123;</span><br><span class="line">    <span class="attr">rules</span>: [</span><br><span class="line">      &#123;</span><br><span class="line">        <span class="attr">test</span>: <span class="regexp">/\.js$/</span>,</span><br><span class="line">        <span class="attr">use</span>: &#123;</span><br><span class="line">          <span class="attr">loader</span>: <span class="string">&quot;babel-loader&quot;</span>,</span><br><span class="line">          <span class="attr">options</span>: &#123;</span><br><span class="line">            <span class="attr">presets</span>: [</span><br><span class="line">              [<span class="string">&quot;@babel/preset-env&quot;</span>, &#123;</span><br><span class="line">                <span class="attr">targets</span>: <span class="string">&quot;&gt; 0.5%, last 2 versions, Firefox ESR, not dead&quot;</span></span><br><span class="line">              &#125;]</span><br><span class="line">            ]</span><br><span class="line">          &#125;</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;</span><br><span class="line">    ]</span><br><span class="line">  &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/26/Browserslist%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</id>
    <link href="https://loli.fj.cn/2026/07/26/Browserslist%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <published>2026-07-26T23:15:52.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>Shared browser compatibility config for popular JavaScript tools like Autoprefixer, Babel, ESLint, PostCSS, and Webpack（<a href="/302.html?target=https://browsersl.ist/">官网</a>）</p>]]>
    </summary>
    <title>【笔记】Browserslist学习笔记</title>
    <updated>2026-08-11T09:53:50.468Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>OpenAI的Codex学习笔记</p><span id="more"></span><h2 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h2><h3 id="npm"><a href="#npm" class="headerlink" title="npm"></a>npm</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -g @openai/codex</span><br></pre></td></tr></table></figure><h3 id="MacOS"><a href="#MacOS" class="headerlink" title="MacOS"></a>MacOS</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">brew install codex</span><br></pre></td></tr></table></figure><h2 id="启动交互式终端"><a href="#启动交互式终端" class="headerlink" title="启动交互式终端"></a>启动交互式终端</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">codex</span><br></pre></td></tr></table></figure><h3 id="登录"><a href="#登录" class="headerlink" title="登录"></a>登录</h3><h4 id="使用授权码登录"><a href="#使用授权码登录" class="headerlink" title="使用授权码登录"></a>使用授权码登录</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">codex login --device-auth</span><br></pre></td></tr></table></figure><h2 id="ACP"><a href="#ACP" class="headerlink" title="ACP"></a>ACP</h2><h3 id="下载依赖-1"><a href="#下载依赖-1" class="headerlink" title="下载依赖"></a>下载依赖</h3><h4 id="npm-1"><a href="#npm-1" class="headerlink" title="npm"></a>npm</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -g @agentclientprotocol/codex-acp</span><br></pre></td></tr></table></figure><h4 id="MacOS-1"><a href="#MacOS-1" class="headerlink" title="MacOS"></a>MacOS</h4><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">brew install codex-acp</span><br></pre></td></tr></table></figure><h3 id="启动ACP服务"><a href="#启动ACP服务" class="headerlink" title="启动ACP服务"></a>启动ACP服务</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">codex-acp</span><br></pre></td></tr></table></figure><h2 id="MCP"><a href="#MCP" class="headerlink" title="MCP"></a>MCP</h2><h3 id="查看所有MCP服务"><a href="#查看所有MCP服务" class="headerlink" title="查看所有MCP服务"></a>查看所有MCP服务</h3><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">codex mcp list</span><br></pre></td></tr></table></figure><h2 id="配置任意模型供应商"><a href="#配置任意模型供应商" class="headerlink" title="配置任意模型供应商"></a>配置任意模型供应商</h2><ul><li>配置任意符合OpenAI接口协议的模型供应商</li></ul><blockquote><p><code>&lt;provider_name&gt;</code>：供应商唯一标识<br><code>&lt;provider_display_name&gt;</code>：供应商显示名<br><code>&lt;url&gt;</code>：API的URL</p></blockquote><blockquote><p><code>model_provider</code>：定义模型提供商<br><code>model</code>：定义主模型<br><code>review_model</code>：定义review模型，不填则使用主模型<br><code>model_reasoning_effort</code>：定义推理模型的思考强度</p><blockquote><p><code>&quot;low&quot;</code>：低<br><code>&quot;medium&quot;</code>：中<br><code>&quot;high&quot;</code>：高<br><code>&quot;xhigh&quot;</code>：最高</p></blockquote><p><code>disable_response_storage</code>：禁止响应内容保存本地</p><blockquote><p><code>false</code>：缺省值，允许响应内容保存本地<br><code>true</code>：禁止响应内容保存本地</p></blockquote><p><code>network_access</code>：允许联网搜索</p><blockquote><p><code>disabled</code>：缺省值，禁止联网搜索<br><code>enabled</code>：允许联网搜索</p></blockquote><p><code>windows_wsl_setup_acknowledged = true</code>：Windows的WSL确认弹窗跳过</p></blockquote><figure class="highlight toml"><figcaption><span>~/.codex/config.toml</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">model_provider</span> = <span class="string">&quot;&lt;provider_name&gt;&quot;</span></span><br><span class="line"><span class="attr">model</span> = <span class="string">&quot;gpt-5.5&quot;</span></span><br><span class="line"><span class="attr">review_model</span> = <span class="string">&quot;gpt-5.5&quot;</span></span><br><span class="line"><span class="attr">model_reasoning_effort</span> = <span class="string">&quot;high&quot;</span></span><br><span class="line"><span class="attr">disable_response_storage</span> = <span class="literal">false</span></span><br><span class="line"><span class="attr">network_access</span> = <span class="string">&quot;disabled&quot;</span></span><br><span class="line"><span class="attr">windows_wsl_setup_acknowledged</span> = <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="section">[model_providers.&lt;provider_name&gt;]</span></span><br><span class="line"><span class="attr">name</span> = <span class="string">&quot;&lt;provider_display_name&gt;&quot;</span></span><br><span class="line"><span class="attr">base_url</span> = <span class="string">&quot;&lt;url&gt;&quot;</span></span><br><span class="line"><span class="attr">wire_api</span> = <span class="string">&quot;responses&quot;</span></span><br><span class="line"><span class="attr">requires_openai_auth</span> = <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="section">[features]</span></span><br><span class="line"><span class="attr">goals</span> = <span class="literal">true</span></span><br></pre></td></tr></table></figure><blockquote><p><code>&lt;api_key&gt;</code>：API的密钥</p></blockquote><figure class="highlight json"><figcaption><span>~/.codex/auth.json</span></figcaption><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;OPENAI_API_KEY&quot;</span><span class="punctuation">:</span> <span class="string">&quot;&lt;api_key&gt;&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/22/Codex%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</id>
    <link href="https://loli.fj.cn/2026/07/22/Codex%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <published>2026-07-22T23:34:49.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>OpenAI的Codex学习笔记</p>]]>
    </summary>
    <title>【笔记】Codex学习笔记</title>
    <updated>2026-08-11T09:53:50.478Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <category term="Windows" scheme="https://loli.fj.cn/tags/Windows/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>MicrosoftStore微软商店学习笔记</p><span id="more"></span><h2 id="安装微软商店"><a href="#安装微软商店" class="headerlink" title="安装微软商店"></a>安装微软商店</h2><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">Add-AppxPackage</span> <span class="literal">-Register</span> <span class="string">&quot;C:\Program Files\WindowsApps\*Store*\AppxManifest.xml&quot;</span> <span class="literal">-DisabledDevelopmentMode</span> </span><br></pre></td></tr></table></figure><h2 id="卸载微软商店"><a href="#卸载微软商店" class="headerlink" title="卸载微软商店"></a>卸载微软商店</h2><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">Get-AppxPackage</span> <span class="literal">-AllUsers</span> | <span class="built_in">Where-Object</span> Name <span class="operator">-eq</span> <span class="string">&quot;Microsoft.WindowsStore&quot;</span> | <span class="built_in">Remove-AppxPackage</span></span><br></pre></td></tr></table></figure><h2 id="离线安装微软商店内的软件"><a href="#离线安装微软商店内的软件" class="headerlink" title="离线安装微软商店内的软件"></a>离线安装微软商店内的软件</h2><ol><li>访问<a href="https://store.rg-adguard.net/">https://store.rg-adguard.net/</a>下载离线安装包</li><li>通过PowerShell命令安装离线安装包</li></ol><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">Add-AppxPackage</span> <span class="literal">-Path</span> &lt;file&gt;.msix</span><br></pre></td></tr></table></figure><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">Add-AppxPackage</span> <span class="literal">-Path</span> &lt;file&gt;.msixbundle</span><br></pre></td></tr></table></figure><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">Add-AppxPackage</span> <span class="literal">-Path</span> &lt;file&gt;.appx</span><br></pre></td></tr></table></figure><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">Add-AppxPackage</span> <span class="literal">-Path</span> &lt;file&gt;.appxbundle</span><br></pre></td></tr></table></figure><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2><h2 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h2><p><a href="/302.html?target=https://bun.plus/posts/how-to-reinstall-microsoft-store">呼呼小笼包的博客</a><br><a href="https://answers.microsoft.com/zh-hans/windows/forum/all/microsoft/f5c81ff0-1bd9-44d3-b930-7225e01804a9">MicrosoftCommunity——Austin_Gao</a></p>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/19/MicrosoftStore%E5%BE%AE%E8%BD%AF%E5%95%86%E5%BA%97%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/</id>
    <link href="https://loli.fj.cn/2026/07/19/MicrosoftStore%E5%BE%AE%E8%BD%AF%E5%95%86%E5%BA%97%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    <published>2026-07-19T18:08:21.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>MicrosoftStore微软商店学习笔记</p>]]>
    </summary>
    <title>【笔记】MicrosoftStore微软商店学习笔记</title>
    <updated>2026-08-11T09:53:50.529Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>通过NapCat与QQ交互，通过AstrBot实现AI机器人，最终实现QQ机器人</p><span id="more"></span><h2 id="准备工作"><a href="#准备工作" class="headerlink" title="准备工作"></a>准备工作</h2><ul><li><a href="/2026/07/16/%E9%83%A8%E7%BD%B2NapCat/">部署NapCat</a></li><li><a href="/2026/07/16/%E9%83%A8%E7%BD%B2AstrBot/">部署AstrBot</a></li></ul><h2 id="NapCat创建WebSocket客户端"><a href="#NapCat创建WebSocket客户端" class="headerlink" title="NapCat创建WebSocket客户端"></a>NapCat创建WebSocket客户端</h2><ul><li>访问NapCat-&gt;<code>网络配置</code>-&gt;<code>新建</code>-&gt;<code>Websocket客户端</code></li></ul><p><img src="/../images/20260716123408/01.webp"></p><ul><li>URL改为<code>ws://127.0.0.1:6199/ws</code>-&gt;复制Token-&gt;<code>保存</code></li></ul><p><img src="/../images/20260716123408/02.webp"></p><h2 id="AstrBot创建OneBot机器人"><a href="#AstrBot创建OneBot机器人" class="headerlink" title="AstrBot创建OneBot机器人"></a>AstrBot创建OneBot机器人</h2><ul><li>访问AstrBot-&gt;<code>机器人</code>-&gt;<code>创建机器人</code></li></ul><p><img src="/../images/20260716123408/03.webp"></p><ul><li><code>消息平台类别</code>改为<code>OneBot v11</code>-&gt;<code>反向 Websocket Token</code>填写为上一步骤复制的Token-&gt;<code>保存</code></li></ul><p><img src="/../images/20260716123408/04.webp"></p><h2 id="NapCat启动WebSocket客户端"><a href="#NapCat启动WebSocket客户端" class="headerlink" title="NapCat启动WebSocket客户端"></a>NapCat启动WebSocket客户端</h2><ul><li>访问NapCat-&gt;<code>网络配置</code>-&gt;启动WebSocket客户端</li></ul><p><img src="/../images/20260716123408/05.webp"></p><ul><li>此时AstrBot机器人的平台日志输出<code>aiocqhttp(OneBot v11) 适配器已连接。</code>表示成功建立连接</li></ul><p><img src="/../images/20260716123408/06.webp"></p><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2><h2 id="参考文献"><a href="#参考文献" class="headerlink" title="参考文献"></a>参考文献</h2><p><a href="/302.html?target=https://www.cnblogs.com/ljbguanli/p/19890153">博客园——ljbguanli</a></p>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/16/%E9%80%9A%E8%BF%87NapCat%E5%92%8CAstrBot%E5%AE%9E%E7%8E%B0QQ%E6%9C%BA%E5%99%A8%E4%BA%BA/</id>
    <link href="https://loli.fj.cn/2026/07/16/%E9%80%9A%E8%BF%87NapCat%E5%92%8CAstrBot%E5%AE%9E%E7%8E%B0QQ%E6%9C%BA%E5%99%A8%E4%BA%BA/"/>
    <published>2026-07-16T04:34:08.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>通过NapCat与QQ交互，通过AstrBot实现AI机器人，最终实现QQ机器人</p>]]>
    </summary>
    <title>【笔记】通过NapCat和AstrBot实现QQ机器人</title>
    <updated>2026-08-11T09:53:50.625Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <category term="Windows" scheme="https://loli.fj.cn/tags/Windows/"/>
    <category term="Github" scheme="https://loli.fj.cn/tags/Github/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>现代化的基于 NTQQ 的 Bot 协议端实现（<a href="/302.html?target=https://napneko.github.io/">官网</a>）</p><span id="more"></span><h2 id="准备工作"><a href="#准备工作" class="headerlink" title="准备工作"></a>准备工作</h2><ul><li>最新版NTQQ</li></ul><p><a href="https://im.qq.com/">传送门</a></p><h2 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h2><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">certutil -urlcache -split -f https://github.com/NapNeko/NapCatQQ/releases/download/v4.<span class="number">18</span>.<span class="number">9</span>/NapCat.Shell.zip</span><br><span class="line">&quot;C:\Program Files\<span class="number">7</span>-Zip\<span class="number">7</span>z.exe&quot; x NapCat.Shell.zip -oNapCat.Shell</span><br><span class="line"><span class="built_in">cd</span> NapCat.Shell</span><br></pre></td></tr></table></figure><h2 id="启动服务"><a href="#启动服务" class="headerlink" title="启动服务"></a>启动服务</h2><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">.\launcher-win10.bat</span><br></pre></td></tr></table></figure><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">[NapCat] [WebUi] WebUi Token: xxxxxxxxxxxx</span><br><span class="line">[NapCat] [WebUi] WebUi User Panel Url: http://127.0.0.1:6099/webui?token=xxxxxxxxxxxx</span><br><span class="line">[NapCat] [WebUi] WebUi User Panel Url: http://[::]:6099/webui?token=xxxxxxxxxxxx</span><br></pre></td></tr></table></figure><ul><li><p>QQ扫码登录</p></li><li><p>访问<a href="http://127.0.0.1:6099/">http://127.0.0.1:6099</a></p></li></ul><blockquote><p>Token：上步骤获取的Token</p></blockquote><p><img src="/../images/20260716095450/01.webp"></p><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2><ul><li>截图纪念</li></ul><p><img src="/../images/20260716095450/02.webp"></p>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/16/%E9%83%A8%E7%BD%B2NapCat/</id>
    <link href="https://loli.fj.cn/2026/07/16/%E9%83%A8%E7%BD%B2NapCat/"/>
    <published>2026-07-16T01:54:50.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>现代化的基于 NTQQ 的 Bot 协议端实现（<a href="/302.html?target=https://napneko.github.io/">官网</a>）</p>]]>
    </summary>
    <title>【笔记】部署NapCat</title>
    <updated>2026-08-11T09:53:50.628Z</updated>
  </entry>
  <entry>
    <author>
      <name>57uv6Z6g</name>
    </author>
    <category term="Github" scheme="https://loli.fj.cn/tags/Github/"/>
    <content>
      <![CDATA[<div id="toot-id" style="display: none">undefined</div><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>AstrBot 是一个跨平台 AI 助手，让 AI 直接工作在你的聊天软件中，实现自动化任务与智能协作，同时提供灵活的 Agent 编排能力。（<a href="/302.html?target=https://astrbot.app/">官网</a>）</p><span id="more"></span><h2 id="准备工作"><a href="#准备工作" class="headerlink" title="准备工作"></a>准备工作</h2><ul><li><a href="/2026/07/16/uv%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/">uv</a></li></ul><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv --version</span><br></pre></td></tr></table></figure><h2 id="下载依赖"><a href="#下载依赖" class="headerlink" title="下载依赖"></a>下载依赖</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">uv tool install astrbot --python 3.12</span><br></pre></td></tr></table></figure><h2 id="初始化"><a href="#初始化" class="headerlink" title="初始化"></a>初始化</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">mkdir astrbot</span><br><span class="line">cd astrbot</span><br><span class="line">astrbot init</span><br></pre></td></tr></table></figure><h2 id="启动服务"><a href="#启动服务" class="headerlink" title="启动服务"></a>启动服务</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">astrbot run</span><br></pre></td></tr></table></figure><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">AstrBot v4.26.6 WebUI is ready</span><br><span class="line"></span><br><span class="line"> ➜  Local: http://localhost:6185</span><br><span class="line"> ➜  Network: http://127.0.0.1:6185</span><br><span class="line"> ➜  Initial username: astrbot</span><br><span class="line"> ➜  Initial password: XXXXXXXXXXXXXXXXXXXXXXXX</span><br><span class="line"> ➜  Change it after logging in</span><br></pre></td></tr></table></figure><ul><li>访问<a href="http://127.0.0.1:6185/">http://127.0.0.1:6185</a></li></ul><blockquote><p>用户名：<code>astrbot</code><br>密码：上一步骤获取的初始密码</p></blockquote><p><img src="/../images/20260716090335/01.webp"></p><h2 id="完成"><a href="#完成" class="headerlink" title="完成"></a>完成</h2><ul><li>截图纪念</li></ul><p><img src="/../images/20260716090335/02.webp"></p>]]>
    </content>
    <id>https://loli.fj.cn/2026/07/16/%E9%83%A8%E7%BD%B2AstrBot/</id>
    <link href="https://loli.fj.cn/2026/07/16/%E9%83%A8%E7%BD%B2AstrBot/"/>
    <published>2026-07-16T01:03:35.000Z</published>
    <summary>
      <![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>AstrBot 是一个跨平台 AI 助手，让 AI 直接工作在你的聊天软件中，实现自动化任务与智能协作，同时提供灵活的 Agent 编排能力。（<a href="/302.html?target=https://astrbot.app/">官网</a>）</p>]]>
    </summary>
    <title>【笔记】部署AstrBot</title>
    <updated>2026-08-11T09:53:50.628Z</updated>
  </entry>
</feed>
