<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/rss/rss-style.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>和合天宜</title><description>欢迎来到和合天宜</description><link>https://www.hhtianyi.com/</link><copyright>Copyright © 2025 Sunny</copyright><language>zh</language><lastBuildDate>Mon, 11 Aug 2025 02:56:18 GMT</lastBuildDate><item><title>输入法推荐：RIME + 雾凇拼音</title><link>https://www.hhtianyi.com/posts/app/rime/</link><guid isPermaLink="true">https://www.hhtianyi.com/posts/app/rime/</guid><description>介绍 RIME／中州韵输入法引擎，是一个跨平台的输入法算法框架。 基于这一框架，Rime 开发者与其他开源社区的参与者在 Windows、m...</description><pubDate>Tue, 13 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;介绍&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://rime.im&quot;&gt;RIME／中州韵输入法引擎&lt;/a&gt;，是一个跨平台的输入法算法框架。&lt;/p&gt;
&lt;p&gt;基于这一框架，Rime 开发者与其他开源社区的参与者在 Windows、macOS、Linux、Android 等平台上创造了不同的输入法前端实现。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/iDvel/rime-ice&quot;&gt;雾凇拼音&lt;/a&gt;则是RIME的一个长期维护的简体开源词库。亮点丰富，功能强大，维护在线。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;安装&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Windows 平台下的安装、更新&lt;/p&gt;
&lt;p&gt;前往&lt;a href=&quot;https://rime.im/download/&quot;&gt;RIME官方网站&lt;/a&gt;，下载小狼毫（Weasel）安装包；&lt;/p&gt;
&lt;p&gt;下载后，运行安装程序，按提示安装即可。期间，安装程序会要求你指定用户文件夹，该文件夹用于放置 RIME 的用户配置文件，通常使用默认设置即可，当然你也可以指定其他的位置。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装雾凇拼音&lt;/p&gt;
&lt;p&gt;Windows 平台安装雾凇拼音非常方便，可以直接使用小狼毫输入法自带的配置工具。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;更新步骤与安装步骤完全相同&lt;/strong&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;第一步，右键点击任务栏上的 RIME 图标，选择「输入法设定」，打开配置工具。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;第二步，在配置工具中，点击左下角的「获取更多输入方案」按钮。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;第三步，随后会出现一个命令行窗口，这就是小狼毫自带的配置文件安装工具。在提示符「&lt;code&gt;Enter package name...&lt;/code&gt;」后，输入雾凇拼音的包名（其中，full表示安装所有的组件）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;iDvel/rime-ice:others/recipes/full
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;第四步，回车确认，随即 RIME 会自动下载、安装雾凇拼音输入方案，如下图所示。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;注意：配置文件安装工具需要用到 Git。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;第五步，稍等片刻，命令提示符出现「&lt;code&gt;Updated xxx files...&lt;/code&gt;」的提示（黄色字样），表示安装完成。此时可以直接关掉该窗口。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;第六步，回到小狼毫配置工具，将列表往下拉，你就会看到雾凇拼音的选项。勾选它，然后单击「中」按钮3，确认。&lt;/p&gt;
&lt;p&gt;接下来配置工具还会要求你选择一款皮肤，选择&lt;code&gt;纯粹的形式&lt;/code&gt;。直接点击「中」按钮确认，即可完成全部设置。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;激活雾凇拼音输入方案&lt;/p&gt;
&lt;p&gt;现在雾凇拼音输入方案已经准备就绪，但还没有激活。此时输入文字，仍然还在使用原有的拼音方案。&lt;/p&gt;
&lt;p&gt;接下来，只需要按 &lt;code&gt;「Ctrl+~」&lt;/code&gt; 快捷键（其中，&lt;code&gt;「~」&lt;/code&gt; 键位于 &lt;code&gt;Tab&lt;/code&gt; 键的正上方），打开 RIME 的输入方案选择菜单，选择 雾凇拼音 即可。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;一些配置&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;字体&lt;/p&gt;
&lt;p&gt;推荐&lt;a href=&quot;https://github.com/lxgw/LxgwWenKai&quot;&gt;霞鹜文楷&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;前往用户文件夹，修改&lt;code&gt;weasel.custom.yaml&lt;/code&gt;文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; ```yaml
 patch:
   &quot;style/color_scheme&quot;: purity_of_form_custom # 选择的皮肤
   &quot;style/font_face&quot;: &quot;霞鹜文楷, Segoe UI Emoji, Microsoft YaHei, SF Pro, Noto Color Emoji&quot; # 字体
   &quot;style/font_point&quot;: 12 # 字体大小
   &quot;style/label_font_face&quot;: &quot;霞鹜文楷&quot; # 序号字体
   &quot;style/comment_font_face&quot;: &quot;霞鹜文楷&quot; # 注字体
   &quot;show_notifications&quot;: false # 不显示状态变化的通知
 ```
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;候选词个数&lt;/p&gt;
&lt;p&gt;前往用户文件夹，修改&lt;code&gt;default.custom.yaml&lt;/code&gt;文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; ```yaml
   patch:
     schema_list:
       - {schema: rime_ice} # 选定的雾凇拼音输入方案
     menu:
       page_size: 7 # 修改候选词数量为7
 ```
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 Ctrl + space 切换中英文输入法&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;禁用系统 Ctrl + space 切换中英文&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1. 打开注册表，跳转到HKEY_CURRENT_USER/Control Panel/Input Method/Hot Keys目录下面
2. 选择00000070（中文繁体）或者00000010（中文简体）
3. 将Key Modifiers的第一个字节设置为00（02c00000-&amp;gt;00c00000）
4. 将Virtual Key的第一个字节设置为ff（20000000-&amp;gt;ff000000）
5. 注销用户然后重新登录，搞定

另外
HKEY_CURRENT_USER/Control Panel/Input Method/Hot Keys，保存的是当前用户的快捷键配置；
HKEY_USERS.DEFAULT\Control Panel\Input Method\Hot Keys，保存的是默认的快捷键配置；
若修改上一个注册表不好使，那就把下面的默认的也修改了
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;配置 &lt;code&gt;default.custom.yaml&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;patch:
  # 禁用默认中西文切换
  &quot;ascii_composer/switch_key/Shift_L&quot;: noop
  &quot;ascii_composer/switch_key/Shift_R&quot;: noop

  # 新建 中西文切换 快捷键绑定
  &quot;key_binder/bindings&quot;:
    - { when: always, accept: &quot;Control+space&quot;, toggle: ascii_mode }
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;解决 方案选单快捷键 在 VSCode 中与打开终端快捷键冲突&lt;/p&gt;
&lt;p&gt;禁用 &lt;code&gt;default.yaml&lt;/code&gt; 中的 &lt;code&gt;方案选单相关&lt;/code&gt; 下 &lt;code&gt;hotkeys&lt;/code&gt; 下的 &lt;code&gt;Control+grave&lt;/code&gt; 选项，并重新部署&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;相关文档&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://rime.im/download/&quot;&gt;RIME官方网站&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/iDvel/rime-ice&quot;&gt;雾凇拼音&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://dvel.me/posts/rime-ice&quot;&gt;Rime 配置：雾凇拼音&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://sspai.com/post/89281&quot;&gt;RIME + 雾凇拼音，打造绝佳的开源文字输入体验&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;完。&lt;/p&gt;
</content:encoded></item><item><title>AI i18n，两行js实现html全自动翻译。</title><link>https://www.hhtianyi.com/posts/plugin/translate/</link><guid isPermaLink="true">https://www.hhtianyi.com/posts/plugin/translate/</guid><description>介绍 Github 官方文档 使用示例 在浏览器中使用（html + js） &lt;!-- 增加某种语言切换的按钮。注意 ul上加了一个 cla...</description><pubDate>Mon, 12 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;介绍&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/xnx3/translate&quot;&gt;Github&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://translate.zvo.cn/index.html&quot;&gt;官方文档&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;使用示例&lt;/h2&gt;
&lt;h3&gt;在浏览器中使用（html + js）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- 增加某种语言切换的按钮。注意 ul上加了一个 class=&quot;ignore&quot; 代表这块代码不会被翻译到 --&amp;gt;
&amp;lt;ul class=&quot;ignore&quot;&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;a href=&quot;javascript:translate.changeLanguage(&apos;english&apos;);&quot;&amp;gt;English&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;|
  &amp;lt;li&amp;gt;&amp;lt;a href=&quot;javascript:translate.changeLanguage(&apos;chinese_simplified&apos;);&quot;&amp;gt;简体中文&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;|
  &amp;lt;li&amp;gt;&amp;lt;a href=&quot;javascript:translate.changeLanguage(&apos;chinese_traditional&apos;);&quot;&amp;gt;繁體中文&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;

&amp;lt;!-- 引入多语言切换的js --&amp;gt;
&amp;lt;script src=&quot;https://cdn.staticfile.net/translate.js/3.12.0/translate.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script&amp;gt;
  translate.selectLanguageTag.show = false; // 不出现的select的选择语言
  translate.service.use(&apos;client.edge&apos;); // 设置机器翻译服务通道
  translate.ignore.class.push(&apos;ignore&apos;); // 忽略翻译
  translate.listener.start() // 开启html页面变化的监控
  translate.execute(); // 执行翻译初始化操作
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;在Vue中使用&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;安装&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;npm i i18n-jsautotranslate
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import translate from &apos;i18n-jsautotranslate&apos;

translate.selectLanguageTag.show = false // 不出现的select的选择语言
window.translate = translate // 方便审核元素用控制台调试
translate.service.use(&apos;client.edge&apos;) // 设置机器翻译服务通道
translate.whole.enableAll() // 整体翻译

// 页面渲染完毕后触发执行 translate.execute();
nextTick(() =&amp;gt; {
  translate.execute() // 执行翻译初始化操作
  // vue 的 input 中的 placeholder 属性会在 nextTick 之后延迟渲染，而这个属性是没有别的方式来监听的，所以额外加一个定时器
  setTimeout(() =&amp;gt; {
    translate.execute() // 执行翻译初始化操作
  }, 500)
  translate.listener.start() // 开启html页面变化的监控
})

onUpdated(() =&amp;gt; {
  translate.execute() // 执行翻译初始化操作
})
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;注意: 比如你vue页面中有个切换语言的按钮，点击后进行切换为某种语言，千万不要在vue页面中引入 translate.js ，这样会造成重复引入重复翻译， vue中使用时只需要前面加个windows就好了; 不是vue的情况正常使用是 &lt;code&gt;translate.changeLanguage(&apos;english&apos;)&lt;/code&gt;; 而在vue代码中触发则是 &lt;code&gt;window.translate.changeLanguage(&apos;english&apos;)&lt;/code&gt;;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;完。&lt;/p&gt;
</content:encoded></item><item><title>使用Scoop管理windows软件</title><link>https://www.hhtianyi.com/posts/scoop/</link><guid isPermaLink="true">https://www.hhtianyi.com/posts/scoop/</guid><description>🔧 准备工作 操作系统：Windows 10 或 Windows 11（Windows 7 SP1+ 理论上也支持，但更推荐新版本）。 P...</description><pubDate>Wed, 07 May 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;🔧 准备工作&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;操作系统&lt;/strong&gt;：Windows 10 或 Windows 11（Windows 7 SP1+ 理论上也支持，但更推荐新版本）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;PowerShell&lt;/strong&gt;：版本 5.1 或更高版本。Windows 10/11 通常自带。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;检查方法&lt;/strong&gt;：打开 PowerShell（按 Win + X，选择“Windows PowerShell”或“终端”），输入 $PSVersionTable.PSVersion 并回车，查看 Major 版本号是否 &amp;gt;= 5。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;.NET Framework&lt;/strong&gt;：4.5 或更高版本 (通常新版 Windows 已满足)。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;网络连接&lt;/strong&gt;：稳定且能访问 GitHub (Scoop 的核心依赖)。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;管理员权限&lt;/strong&gt;：虽然 Scoop 的核心理念是非管理员权限安装，但在首次设置 PowerShell 执行策略或进行全局安装时可能需要。建议首次操作时，以管理员身份运行 PowerShell。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;基本命令行知识&lt;/strong&gt;：别担心！如果你是新手，只需跟着步骤复制粘贴命令即可。我会解释每一步的作用。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;网络环境&lt;/strong&gt;：全程代理网络。如果你在国内网络环境下遇到困难（如下载慢、连接失败），可能需要配置代理或使用其他网络优化方法。文末会提供一些解决方案思路。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;🚀 核心步骤&lt;/h2&gt;
&lt;h3&gt;步骤一：安装 Scoop 本体&lt;/h3&gt;
&lt;p&gt;Scoop 本身就是一个需要被“安装”的工具。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;打开 PowerShell:&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;* 按下 Win + X 快捷键，在菜单中选择 “Windows PowerShell (管理员)” 或 “终端 (管理员)”。**建议首次使用管理员权限，**以确保后续步骤顺利。
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;设置执行策略:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;为了允许 PowerShell 运行像 Scoop 安装脚本这样的本地或远程签名的脚本，需要调整执行策略。输入以下命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;按下回车。如果系统询问是否更改执行策略，输入 &lt;code&gt;Y&lt;/code&gt; 并回车确认。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;💡小科普:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Set-ExecutionPolicy&lt;/code&gt;: 这是设置 PowerShell 执行策略的命令。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;RemoteSigned&lt;/code&gt;: 这是一种安全策略，允许运行本地创建的脚本，对于从网络下载的脚本，则要求它们具有可信发布者的数字签名。这比 &lt;code&gt;Unrestricted&lt;/code&gt;（允许所有脚本）更安全。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;-Scope CurrentUser&lt;/code&gt;: 表示这个设置仅对当前登录的用户生效，通常不需要管理员权限（但首次设置可能需要确认），也更安全。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;执行安装命令:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;接下来，粘贴并运行以下命令来下载并执行 Scoop 的官方安装脚本：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
# 或者使用别名更简洁的版本 (iwr = Invoke-RestMethod, iex = Invoke-Expression)
# iwr -useb get.scoop.sh | iex
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;💡小科普:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Invoke-RestMethod&lt;/code&gt; (或 &lt;code&gt;iwr&lt;/code&gt;): 从指定的 &lt;a href=&quot;https://get.scoop.sh&quot;&gt;URL&lt;/a&gt; 下载内容（这里是安装脚本）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;|&lt;/code&gt; (管道符): 将前一个命令的输出（下载的脚本内容）传递给后一个命令。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;Invoke-Expression&lt;/code&gt; (或 &lt;code&gt;iex&lt;/code&gt;): 执行接收到的字符串内容（也就是运行安装脚本）。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;预期结果:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;等待脚本执行完毕。如果一切顺利，你会在 &lt;code&gt;PowerShell&lt;/code&gt; 窗口看到类似 &lt;code&gt;“Scoop was installed successfully!”&lt;/code&gt; 的成功信息。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;默认情况下，&lt;code&gt;Scoop&lt;/code&gt; 会安装在你的用户目录下：&lt;code&gt;C:\Users\你的用户名\scoop&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;(可选) 修改默认安装路径:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;如果你不想把 &lt;code&gt;Scoop&lt;/code&gt; 安装在 &lt;code&gt;C&lt;/code&gt; 盘，或者想统一管理软件，可以在执行安装命令之前，先运行以下两条命令来指定路径（例如，安装到 &lt;code&gt;D:\Apps\Scoop&lt;/code&gt;）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 1. 设置 Scoop 的安装目录环境变量
$env:SCOOP=&apos;D:\Apps\Scoop&apos;
# 2. 将这个环境变量永久写入用户配置 (下次打开 PowerShell 依然有效)
[Environment]::SetEnvironmentVariable(&apos;SCOOP&apos;, $env:SCOOP, &apos;User&apos;)
# 3. (可选) 设置全局安装路径 (如果需要全局安装软件)
# $env:SCOOP_GLOBAL=&apos;D:\GlobalApps&apos;
# [Environment]::SetEnvironmentVariable(&apos;SCOOP_GLOBAL&apos;, $env:SCOOP_GLOBAL, &apos;Machine&apos;) # Machine 级别需要管理员权限
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;设置完路径后，&lt;code&gt;再执行上面的第 3 步安装命令&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;步骤二：验证安装与添加软件仓库 (Bucket)&lt;/h3&gt;
&lt;p&gt;Scoop 使用 “Bucket”（桶）来管理软件包列表，每个 Bucket 就是一个 Git 仓库，里面包含了软件的安装信息（称为 Manifest，清单文件）。默认只有 main Bucket，主要包含常用的命令行工具。我们需要添加更多 Buckets 来发现和安装更多软件。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;验证 Scoop:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 &lt;code&gt;PowerShell&lt;/code&gt; 中输入 &lt;code&gt;scoop help&lt;/code&gt; 并回车。如果看到 Scoop 的帮助信息和可用命令列表，说明 Scoop 已成功安装并可以工作了。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;添加常用 Bucket:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;extras&lt;/code&gt; Bucket 包含了大量流行的 GUI 软件和非 main Bucket 的常用工具。强烈建议添加：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;scoop bucket add extras
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;💡&lt;strong&gt;提示&lt;/strong&gt;: 添加 Bucket 需要从 GitHub 克隆仓库，如果网络慢请耐心等待。如果失败，检查网络或代理设置。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;重要&lt;/strong&gt;: Scoop 依赖 &lt;code&gt;git&lt;/code&gt; 来管理 Buckets。如果你的系统没有安装 &lt;code&gt;git&lt;/code&gt;，Scoop 在添加第一个 Bucket 时通常会提示并自动尝试安装。你也可以手动安装：&lt;code&gt;scoop install git&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;添加其他常用 Buckets (可选):&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;根据你的需要，可以添加更多社区维护的 Buckets。例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;安装各种 Java 版本：&lt;code&gt;scoop bucket add java&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装 Nerd Fonts (美化终端字体)：&lt;code&gt;scoop bucket add nerd-fonts&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装特定旧版本的软件：&lt;code&gt;scoop bucket add versions&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装非便携应用 (需要特殊处理)：&lt;code&gt;scoop bucket add nonportable&lt;/code&gt; (安装里面的软件可能需要管理员权限)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;去哪里找更多 Buckets？&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;官方维护的 &lt;a href=&quot;https://github.com/ScoopInstaller&quot;&gt;Bucket&lt;/a&gt; 列表&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;社区维护的已知 Buckets 列表：可以在网上搜索 “known scoop buckets” 或 查看 &lt;a href=&quot;https://rasa.github.io/scoop-directory/&quot;&gt;这个非官方索引&lt;/a&gt; (但请注意，首选官方或广泛使用的 Bucket)。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;注意事项:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;添加 Bucket 时需要良好的网络连接。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果命令出错，请检查 Bucket 名称是否拼写正确。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;有时网络波动会导致添加失败，重试一次可能就好了。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;步骤三：用 Scoop 安装你的常用软件&lt;/h3&gt;
&lt;p&gt;激动人心的时刻到了！现在你可以像逛超市一样，用简单的命令安装软件了。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;搜索软件:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;不确定软件是否在已添加的 Buckets 里？用 &lt;code&gt;search&lt;/code&gt; 命令！&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;scoop search &amp;lt;你想搜索的软件名或关键词&amp;gt;
# 例如: 搜索 pnpm
scoop search pnpm
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Scoop 会列出匹配的软件包及其所在的 Bucket。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;更方便的搜索: 你也可以直接访问 &lt;a href=&quot;https://scoop.sh/&quot;&gt;Scoop 的官方网站&lt;/a&gt;，它提供了一个图形化的搜索界面。注意取消勾选页面上的 “main” 筛选器可以搜索到 &lt;code&gt;extras&lt;/code&gt; 等其他 Bucket 中的包。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;安装单个软件:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;找到你需要的软件名后，使用 &lt;code&gt;install&lt;/code&gt; 命令安装。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 安装 Git (来自 main bucket)
scoop install git
# 安装 7zip (来自 main bucket)
scoop install 7zip
# 安装 VS Code (来自 extras bucket)
scoop install vscode
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;一次安装多个软件:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;提高效率，一次性安装多个！用空格隔开软件名即可。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;scoop install nodejs python mysql nginx putty everything powertoys
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;(可选) 全局安装:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;默认情况下，Scoop 安装的软件只对当前用户可用，并且安装在用户目录下的 &lt;code&gt;scoop&lt;/code&gt; 文件夹中（如 &lt;code&gt;C:\Users\你的用户名\scoop\apps&lt;/code&gt;）。这通常不需要管理员权限，也更干净、便携。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果你希望软件对系统上的所有用户都可用，可以使用 &lt;code&gt;-g&lt;/code&gt; 或 &lt;code&gt;--global&lt;/code&gt; 参数。这&lt;strong&gt;需要管理员权限&lt;/strong&gt;运行 PowerShell，并且软件会被安装到全局路径（默认为 &lt;code&gt;C:\ProgramData\scoop&lt;/code&gt;，或通过 &lt;code&gt;$env:SCOOP_GLOBAL&lt;/code&gt; 指定的路径）。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 全局安装 OpenJDK (需要管理员权限运行 PowerShell)
scoop install openjdk --global
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;💡&lt;strong&gt;建议&lt;/strong&gt;: 除非你明确知道需要全局安装，否则优先使用默认的用户模式安装，这更能体现 Scoop 的优势。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;预期结果:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Scoop 会自动下载软件包、解压、处理依赖，并将可执行文件通过 “&lt;code&gt;shim&lt;/code&gt;” 机制添加到你的 &lt;code&gt;PATH&lt;/code&gt; 中。安装完成后，你通常可以直接在新的 &lt;code&gt;PowerShell&lt;/code&gt; 或 &lt;code&gt;CMD&lt;/code&gt; 窗口中使用该软件的命令。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;例如，安装 &lt;code&gt;openjdk&lt;/code&gt; 后，打开一个新的 &lt;code&gt;PowerShell&lt;/code&gt; 窗口，输入 &lt;code&gt;java -version&lt;/code&gt;，应该能看到 &lt;code&gt;Java&lt;/code&gt; 的版本信息。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;💡&lt;strong&gt;Scoop 的魔法：Shim 是什么？&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Scoop 的一个核心优势是&lt;strong&gt;不污染&lt;/strong&gt;系统的 &lt;code&gt;PATH&lt;/code&gt; 环境变量。它怎么做到的？答案是 “&lt;code&gt;Shim&lt;/code&gt;” (垫片)。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;当你安装一个软件（比如 &lt;code&gt;git&lt;/code&gt;）后，&lt;code&gt;Scoop&lt;/code&gt; 不会把 &lt;code&gt;git.exe&lt;/code&gt; 所在的整个目录加到系统 &lt;code&gt;PATH&lt;/code&gt;。它只做一件事：在 &lt;code&gt;~/scoop/shims&lt;/code&gt; 目录下（这个目录在安装 &lt;code&gt;Scoop&lt;/code&gt; 时会被自动添加到用户 &lt;code&gt;PATH&lt;/code&gt; 中）创建一个名为 &lt;code&gt;git.exe&lt;/code&gt; 的极小的可执行文件 (&lt;code&gt;shim&lt;/code&gt;)。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;当你运行 &lt;code&gt;git&lt;/code&gt; 命令时，系统在 &lt;code&gt;PATH&lt;/code&gt; 里找到了 &lt;code&gt;~/scoop/shims/git.exe&lt;/code&gt;。这个 &lt;code&gt;shim&lt;/code&gt; 文件知道真正 &lt;code&gt;git.exe&lt;/code&gt; 的位置（比如在 &lt;code&gt;~/scoop/apps/git/current/bin/git.exe&lt;/code&gt;），然后它会启动真正的 &lt;code&gt;git.exe&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;这样做的好处是：你的 &lt;code&gt;PATH&lt;/code&gt; 变量非常干净，只增加了一个 &lt;code&gt;shims&lt;/code&gt; 目录。卸载软件时，只需删除对应的 &lt;code&gt;shim&lt;/code&gt; 和软件目录，对系统几乎没有影响。对于 GUI 程序，&lt;code&gt;Scoop&lt;/code&gt; 会在开始菜单创建一个 “&lt;code&gt;Scoop Apps&lt;/code&gt;” 文件夹存放快捷方式。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;步骤四：软件的更新与管理&lt;/h3&gt;
&lt;p&gt;安装只是开始，Scoop 还能帮你轻松管理已安装的软件。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;检查更新:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;想知道哪些软件有新版本了？&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 检查 Scoop 自身和所有 Buckets 的更新，并列出可更新的软件
scoop status
# 或者直接更新 Scoop 自身和 Buckets 的信息
scoop update
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;scoop update&lt;/code&gt; 首先会更新 &lt;code&gt;Scoop&lt;/code&gt; 自身和所有已添加的 &lt;code&gt;Bucket&lt;/code&gt;（相当于对每个 &lt;code&gt;Bucket&lt;/code&gt; 的 &lt;code&gt;Git&lt;/code&gt; 仓库执行 &lt;code&gt;git pull&lt;/code&gt;），获取最新的软件包清单。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;更新所有软件:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;一键更新所有已安装且有新版本的软件：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;scoop update *
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;更新指定软件:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;只想更新某个特定的软件？&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;scoop update &amp;lt;软件名&amp;gt;
# 例如: 更新 nodejs
scoop update nodejs
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;查看已安装列表:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;想看看自己都装了些什么？&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;scoop list
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;卸载软件:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;不再需要某个软件了？干干净净地移除它！&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;scoop uninstall &amp;lt;软件名&amp;gt;
# 例如: 卸载 mysql
scoop uninstall mysql
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Scoop 会删除软件文件和对应的 shim/快捷方式，非常彻底。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;查看软件信息:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;想了解某个已安装或可用软件的详细信息（版本、来源、依赖等）？&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;scoop info &amp;lt;软件名&amp;gt;
# 例如: 查看 git 的信息
scoop info git
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;回退到旧版本:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;更新后发现新版本有 Bug？可以尝试回退。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 先查看可用版本
scoop info &amp;lt;软件名&amp;gt;
# 回退到指定版本 (例如回退 git 到 2.30.0.windows.1)
scoop reset &amp;lt;软件名&amp;gt;@&amp;lt;版本号&amp;gt;
scoop reset git@2.30.0.windows.1
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;其他常用命令:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;scoop cleanup *&lt;/code&gt; : 清理所有软件的旧版本，释放磁盘空间。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;scoop cache rm *&lt;/code&gt; : 清除下载缓存。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;scoop home &amp;lt;软件名&amp;gt;&lt;/code&gt; : 在浏览器中打开软件的官方主页。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;scoop which &amp;lt;命令名&amp;gt;&lt;/code&gt; : 显示某个命令对应的可执行文件的实际路径 (类似 Linux 的 which)。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;引用自：&lt;a href=&quot;https://linux.do/t/topic/566873&quot;&gt;重装电脑用Scoop管理软件,清爽多了!&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;完。&lt;/p&gt;
</content:encoded></item><item><title>安装 Git</title><link>https://www.hhtianyi.com/posts/git/</link><guid isPermaLink="true">https://www.hhtianyi.com/posts/git/</guid><description>在使用 Git 前我们需要先安装 Git。Git 支持 macOS，Windows，Linux/Unix。 Git 各平台安装包下载地址为：...</description><pubDate>Mon, 21 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;在使用 Git 前我们需要先安装 Git。Git 支持 macOS，Windows，Linux/Unix。&lt;/p&gt;
&lt;p&gt;Git 各平台安装包下载地址为：https://git-scm.com/downloads&lt;/p&gt;
&lt;h1&gt;Windows&lt;/h1&gt;
&lt;p&gt;下载安装文件并运行即可，安装完成之后，就可以使用命令行的 Git 工具（已经自带了 ssh 客户端），另外还有一个图形界面的 Git 项目管理工具。&lt;/p&gt;
&lt;h1&gt;Mac&lt;/h1&gt;
&lt;p&gt;最新版的 Mac 系统自带了 Git，如果想重新安装，步骤类 Windows&lt;/p&gt;
&lt;h1&gt;Linux&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;Debian/Ubuntu
&lt;ol&gt;
&lt;li&gt;更新系统环境：&lt;code&gt;apt-get update -y &amp;amp;&amp;amp; apt-get upgrade -y&lt;/code&gt;，如果报错则需要提权&lt;/li&gt;
&lt;li&gt;安装 Git：&lt;code&gt;apt-get install git -y&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;完。&lt;/p&gt;
</content:encoded></item><item><title>什么是 npm？</title><link>https://www.hhtianyi.com/posts/npm/</link><guid isPermaLink="true">https://www.hhtianyi.com/posts/npm/</guid><description>npm是世界上最大的软件库（Registry） npm也是一个软件包管理器和安装器 世界上最大的软件注册中心（图书馆） npm是世界上最大的...</description><pubDate>Mon, 21 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;npm&lt;/strong&gt;是世界上最大的&lt;strong&gt;软件库&lt;/strong&gt;（Registry）&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;npm&lt;/strong&gt;也是一个软件包&lt;strong&gt;管理器&lt;/strong&gt;和&lt;strong&gt;安装器&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;世界上最大的软件注册中心（图书馆）&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;npm&lt;/strong&gt;是世界上最大的&lt;strong&gt;软件注册中心&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;该注册表包含超过 800,000 个&lt;strong&gt;代码包&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;开源&lt;/strong&gt;开发人员使用&lt;strong&gt;npm&lt;/strong&gt;来&lt;strong&gt;共享&lt;/strong&gt;软件。&lt;/li&gt;
&lt;li&gt;许多组织还使用 npm 来管理私有开发。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;使用 npm 是免费的&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;npm&lt;/strong&gt;是免费使用的。&lt;/li&gt;
&lt;li&gt;无需注册、登录，即可下载所有npm公共软件包。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;完。&lt;/p&gt;
</content:encoded></item><item><title>关于小程序平台编译慢，卡，组件问题</title><link>https://www.hhtianyi.com/posts/uni-app/</link><guid isPermaLink="true">https://www.hhtianyi.com/posts/uni-app/</guid><description>主要原因是uni dcloud经过编译压缩后的代码，再通过微信工具打开再次识别编译导致的慢，无法避免。 大家可以对比： a. 如果同样一个项...</description><pubDate>Mon, 21 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;主要原因是uni dcloud经过编译压缩后的代码，再通过微信工具打开再次识别编译导致的慢，无法避免。&lt;/p&gt;
&lt;p&gt;大家可以对比：&lt;/p&gt;
&lt;p&gt;a. 如果同样一个项目我有30个页面若干组件，使用微信原生开发，发现微信自带工具编译，热更新非常快！&lt;/p&gt;
&lt;p&gt;b. 但经过uni编译后，引用的组件比如我的tmui组件，因为有大量的插槽编译，导致编译慢，且微信工具重新识别慢，卡&lt;/p&gt;
&lt;p&gt;c. 开发时局部热更新，引入新组件时，开发工具不显示需要重新编译。解决方案是设置代码编码变动整个热更新编译，微信工具上有设置&lt;/p&gt;
&lt;p&gt;解决方案：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1、仅量少嵌套组件，比如tm-sheet，其实就是一个class配置的view，如果你不涉及暗黑完全可以不用，只view就行，通过 我的css工具一样快速实现，不增加代码量。

2、需要使用时应该外层只套一层即可。而不是sheet层层套，倒不是说组件性能问题，是本身开发就要避免组件多级嵌套，才能优化性能。

3、解决编译慢问题，请换个好的电脑你会发现非常快。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;通过以上的优化避免，编译出来的小程序性能一样好，不卡。uni编译出来的性能本身就要比原生差那么一点，如果你还不优化就会感觉卡卡的，怪到组件本身的问题上。&lt;/p&gt;
&lt;p&gt;希望上面的回复对大家优化有帮助。&lt;/p&gt;
&lt;p&gt;完。&lt;/p&gt;
</content:encoded></item><item><title>Git 配置文件</title><link>https://www.hhtianyi.com/posts/git/git-config/</link><guid isPermaLink="true">https://www.hhtianyi.com/posts/git/git-config/</guid><description>.gitignore: 忽略文件 .gitattributes: 用于指定特定文件或路径的属性和行为 设置换行符： *.txt eol=l...</description><pubDate>Mon, 21 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;.gitignore&lt;/code&gt;: 忽略文件&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;.gitattributes&lt;/code&gt;: 用于指定特定文件或路径的属性和行为&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;设置换行符：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;*.txt eol=lf     # 将所有 .txt 文件的换行符设置为 LF (Unix 风格)
*.md eol=crlf    # 将所有 .md 文件的换行符设置为 CRLF (Windows 风格)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;设置文件类型：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;*.png binary    # 将所有 .png 文件标记为二进制文件
*.txt text      # 将所有 .txt 文件标记为文本文件
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;设置合并策略：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;*.txt merge=union    # 使用 union 合并策略合并 .txt 文件
*.md merge=ours      # 使用 ours 合并策略合并 .md 文件
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;设置文件编码：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;*.html charset=utf-8    # 将所有 .html 文件的编码设置为 UTF-8
*.css charset=utf-8     # 将所有 .css 文件的编码设置为 UTF-8
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;.gitkeep&lt;/code&gt;：这是一个约定的文件名，用于在空文件夹中保留该文件夹的版本控制。Git 默认不会跟踪空文件夹，但如果您想在版本库中保留空文件夹，可以在其中添加一个名为 &lt;code&gt;.gitkeep&lt;/code&gt; 的空文件。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;完。&lt;/p&gt;
</content:encoded></item><item><title>Git 多公钥配置</title><link>https://www.hhtianyi.com/posts/git/multi-public-key-configuration/</link><guid isPermaLink="true">https://www.hhtianyi.com/posts/git/multi-public-key-configuration/</guid><description>解决一个公钥无法共用问题 生成第一个密钥 ssh-keygen -t rsa -C &quot;emailname@email.com&quot; 生成第二个...</description><pubDate>Mon, 21 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;解决一个公钥无法共用问题&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;生成第一个密钥&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh-keygen -t rsa -C &quot;emailname@email.com&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;生成第二个公钥&lt;/p&gt;
&lt;p&gt;&lt;code&gt;two_git&lt;/code&gt; 是第二个公钥的名称&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh-keygen -t rsa -C  &quot;emailname@email.com&quot; -f two_git
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在 &lt;code&gt;.ssh&lt;/code&gt; 目录新建 &lt;code&gt;config&lt;/code&gt; 文件&lt;/p&gt;
&lt;p&gt;&lt;code&gt;windows&lt;/code&gt;下的 &lt;code&gt;.ssh&lt;/code&gt; 目录 在 &lt;code&gt;C:\Users\username&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;config&lt;/code&gt; 文件配置&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 账号一Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
# 账号二# giteeHost two.gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/two_git
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;ssh&lt;/code&gt; 的方式克隆仓库&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;使用账号一克隆代码&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone git@gitee.com:xxxxxxx
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用账号二克隆代码&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git clone git@two.gitee.com:xxxxxxx
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;完。&lt;/p&gt;
</content:encoded></item><item><title>Git 使用</title><link>https://www.hhtianyi.com/posts/git/git-use/</link><guid isPermaLink="true">https://www.hhtianyi.com/posts/git/git-use/</guid><description>设置项目内的user.name和user.email git config --local user.name &quot;xxxxxx&quot;git co...</description><pubDate>Mon, 21 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;设置项目内的user.name和user.email&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;git config --local user.name &quot;xxxxxx&quot;git config --local user.email &quot;xxx@xxxx.xxx&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;.gitignore&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;.gitignore&lt;/code&gt; 是一个用于指定Git版本控制系统忽略哪些文件和目录的配置文件。当你在项目中创建了.gitignore文件并定义了忽略规则后，Git会自动忽略这些文件和目录的变更。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;.gitignore&lt;/code&gt; 文件的语法很简单，每一行表示一个忽略规则。你可以使用以下几种模式来指定要忽略的文件或目录：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;文件名匹配：
&lt;ul&gt;
&lt;li&gt;filename：忽略特定文件或目录，如myfile.txt；&lt;/li&gt;
&lt;li&gt;.txt：通配符模式，忽略所有以”.txt”结尾的文件；&lt;/li&gt;
&lt;li&gt;folder/：忽略特定目录，如myfolder/；&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;路径匹配：
&lt;ul&gt;
&lt;li&gt;/path/to/file：从根目录开始的完整路径，忽略特定文件或目录；&lt;/li&gt;
&lt;li&gt;path/：相对于当前位置的路径，忽略特定目录及其内容；&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;注释：
&lt;ul&gt;
&lt;li&gt;使用#作为注释标识，可以在文件中添加注释说明。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;.gitignore规则不生效&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;.gitignore&lt;/code&gt; 只能忽略那些原来没有被track的文件，如果某些文件已经被纳入了版本管理中，则修改 &lt;code&gt;.gitignore&lt;/code&gt; 是无效的。&lt;/p&gt;
&lt;p&gt;解决方法就是先把本地缓存删除（改变成未 &lt;code&gt;track&lt;/code&gt; 状态），然后再提交&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git rm -r --cached .git add .git commit -m &apos;chore: update .gitignore&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以使用 &lt;code&gt;git&lt;/code&gt; 提供的 &lt;code&gt;Git Bash&lt;/code&gt; 键入一下命令创建 &lt;code&gt;.gitignore&lt;/code&gt; 文件&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;touch .gitignore 创建忽略文件
open .gitignore 打开忽略文件
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;克隆仓库又创建了一个新的文件夹怎么办？&lt;/h2&gt;
&lt;p&gt;有些时候在克隆代码仓库之前会创建一个新的空文件夹以便于管理项目，但克隆代码仓库会新创建一个文件夹。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;new-product
└── code-repository-name
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样的话，可以将 &lt;code&gt;code-repository-name&lt;/code&gt; 文件夹内所有文件都向上拷贝到 &lt;code&gt;new-product&lt;/code&gt; 文件夹下，删除 &lt;code&gt;code-repository-name&lt;/code&gt; 即可。&lt;/p&gt;
&lt;h2&gt;仓库迁移&lt;/h2&gt;
&lt;p&gt;下面的指令可以把已经在的团队的代码仓库提交的代码连着提交历史一起提交到新的代码仓库中，备份好代码后可以使用这个命令把项目从别的团队转到新的团队 ，但是项目协同相关的信息不会一起转移&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git push --mirror 仓库地址
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;强制拉取线上代码覆盖本地文件&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;需要将这些更新取回本地，这时就要用到git fetch命令&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git fetch --all
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;撤销本地、暂存区、版本库（用远程服务器的origin/master替换本地）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git reset --hard origin/master
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;git pull 来从远程仓库拉取同步代码&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git pull origin master
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;完。&lt;/p&gt;
</content:encoded></item><item><title>服务器部署 Git 代码</title><link>https://www.hhtianyi.com/posts/git/server-deployment/</link><guid isPermaLink="true">https://www.hhtianyi.com/posts/git/server-deployment/</guid><description>服务器部分 随便找个文件夹创建空git仓库 # 前往 /opt 文件创建 Bare 仓库cd /opt # test-git 可以换成任何文...</description><pubDate>Mon, 21 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;服务器部分&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;随便找个文件夹创建空&lt;code&gt;git&lt;/code&gt;仓库&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 前往 /opt 文件创建 Bare 仓库cd /opt
# test-git 可以换成任何文件名# Bare 仓库即是没有工作路径的 Git 仓库, 可以从本地运行 git push 将代码推送到当前的 Bare 仓库中git init test-git.git --bare
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;进入文件夹中的 hooks 文件夹创建&lt;code&gt;post-receive&lt;/code&gt;文件，设置&lt;code&gt;hook&lt;/code&gt;，这样每当仓库收到新的代码推送时，就可以运行一些动作&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd test-git.git/hooks/
vim post-receive
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;修改&lt;code&gt;post-receive&lt;/code&gt;文件并保存&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 首先定义这个文档使用 bash 执行
# !/bin/bash
# 定义终端输出文案（随便定义）echo &apos;server: received code push...&apos;
# 切换到服务目录cd /www/wwwroot
# 定义终端输出文案（随便定义）# 准备从 Bare 仓库 将代码 checkout 到服务目录echo &apos;server: checkout latest code from git...&apos;
# 执行从 Bare 仓库 将代码 checkout master 分支到服务目录
# checkout 的分支可以自行定义# GIT_DIR 是 .git 目录的位置。 如果这个没有设置， Git 会按照目录树逐层向上查找 .git 目录，直到到达 ~ 或 /。
# GIT_WORK_TREE 是非空版本库的工作目录的根路径。 如果指定了 --git-dir 或 GIT_DIR 但未指定 --work-tree、GIT_WORK_TREE 或 core.worktree，那么当前工作目录就会视作工作树的顶级目录。git --git-dir=/opt/test-git.git --work-tree=/www/wwwroot/test checkout master -f
# 如果是 Node 项目，可以在后续添加以下命令（或其他项目需要的编译命令）
# 定义终端输出文案（随便定义）echo &apos;server: running npm install...&apos;
# 执行 npm install, npm run build# 当中的 &amp;amp;&amp;amp; 符号代表紧接着要执行的命令# 句末的反斜杠是连接下一行的意思npm install \&amp;amp;&amp;amp; echo &apos;server: building...&apos; \&amp;amp;&amp;amp; npm run build \&amp;amp;&amp;amp; echo &apos;server: done.&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;赋予&lt;code&gt;post-receive&lt;/code&gt;执行权限&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;chmod +x post-receive
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;本地部分&lt;/h2&gt;
&lt;p&gt;服务器部分处理完就可以回到本地代码操作了&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;使用&lt;code&gt;vscode&lt;/code&gt;等编辑器打开带有&lt;code&gt;git&lt;/code&gt;仓库的代码文件夹&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;运行 &lt;code&gt;git remote add prod&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# prod 是 production 的缩写
# root 是服务器的登录名称，后期可以创建一个低权限的账号进行操作
# 然后是服务器的IP，以及Git Bare 仓库的路径git remote add prod ssh://root@IP地址/opt/test-git.git
# 执行 git remote -v 查看新增的 prod 是否正确# remote 是远端代码托管平台的地址git remote -v# 执行 git push prod master 将代码推送到服务器# 就可以看到在 hooks/post-receive 中以&apos;server: &apos; 开头的讯息，就是定义的post-receive hook 所执行的指令git push prod master
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;补充部分&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;新建用户&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo adduser newuser
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;赋予用户权限&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;以当前文档为例&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;sudo chown -R newuser /opt/test-git.git
sudo chown -R newuser /www/wwwroot/test
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;完。&lt;/p&gt;
</content:encoded></item><item><title>使用 nvm 管理不同版本的 node 与 npm</title><link>https://www.hhtianyi.com/posts/npm/use/</link><guid isPermaLink="true">https://www.hhtianyi.com/posts/npm/use/</guid><description>在我们的日常开发中经常会遇到这种情况：手上有好几个项目，每个项目的需求不同，进而不同项目必须依赖不同版的 NodeJS 运行环境。如果没有一...</description><pubDate>Mon, 21 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;在我们的日常开发中经常会遇到这种情况：手上有好几个项目，每个项目的需求不同，进而不同项目必须依赖不同版的 NodeJS 运行环境。如果没有一个合适的工具，这个问题将非常棘手。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/creationix/nvm&quot;&gt;nvm&lt;/a&gt; 应运而生，nvm 是 Mac 下的 node 管理工具，有点类似管理 Ruby 的 rvm，如果需要管理 Windows 下的 node，官方推荐使用 &lt;a href=&quot;https://github.com/hakobera/nvmw&quot;&gt;nvmw&lt;/a&gt; 或 &lt;a href=&quot;https://github.com/coreybutler/nvm-windows&quot;&gt;nvm-windows&lt;/a&gt;。不过，nvm-windows 并不是 nvm 的简单移植，他们也没有任何关系。但下面介绍的所有命令，都可以在 nvm-windows 中运行。&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;nvm 与 n 的区别&lt;/h3&gt;
&lt;p&gt;node 版本管理工具还有一个是 TJ大神的 &lt;a href=&quot;https://github.com/tj/n&quot;&gt;n&lt;/a&gt; 命令，n 命令是作为一个 node 的模块而存在，而 nvm 是一个独立于 node/npm 的外部 shell 脚本，因此 n 命令相比 nvm 更加局限。&lt;/p&gt;
&lt;p&gt;由于 npm 安装的模块路径均为 &lt;strong&gt;&lt;code&gt;/usr/local/lib/node_modules&lt;/code&gt;&lt;/strong&gt;，当使用 n 切换不同的 node 版本时，实际上会共用全局的 node/npm 目录。 因此不能很好的满足『按不同 node 版本使用不同全局 node 模块』的需求。&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;使用 nvm 之前的工作&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;如果是新电脑，忽略；&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;完全卸载已经安装的 NodeJS，否则会发生冲突；&lt;/li&gt;
&lt;li&gt;删除系统环境变量中有关 NodeJs 的路径配置；&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h3&gt;Window 安装&lt;/h3&gt;
&lt;p&gt;下载 &lt;a href=&quot;https://github.com/coreybutler/nvm-windows/releases&quot;&gt;nvm-windows&lt;/a&gt; 最新安装包，直接安装即可&lt;/p&gt;
&lt;hr /&gt;
&lt;h3&gt;安装多版本 node/npm&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;首先，运行 &lt;code&gt;nvm --help&lt;/code&gt;，查看支持的命令&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;PS C:\Users\username&amp;gt; nvm --helpRunning version 1.1.11.
Usage:  nvm arch                     : Show if node is running in 32 or 64 bit mode.
  nvm current                  : Display active version.
  nvm debug                    : Check the NVM4W process for known problems (troubleshooter).  nvm install &amp;lt;version&amp;gt; [arch] : The version can be a specific version, &quot;latest&quot; for the latest current version, or &quot;lts&quot; for the
                                 most recent LTS version. Optionally specify whether to install the 32 or 64 bit version (defaults                                 to system arch). Set [arch] to &quot;all&quot; to install 32 AND 64 bit versions.
                                 Add --insecure to the end of this command to bypass SSL validation of the remote download server.
  nvm list [available]         : List the node.js installations. Type &quot;available&quot; at the end to see what can be installed. Aliased as ls.
  nvm on                       : Enable node.js version management.
  nvm off                      : Disable node.js version management.
  nvm proxy [url]              : Set a proxy to use for downloads. Leave [url] blank to see the current proxy.
                                 Set [url] to &quot;none&quot; to remove the proxy.
  nvm node_mirror [url]        : Set the node mirror. Defaults to https://nodejs.org/dist/. Leave [url] blank to use default url.
  nvm npm_mirror [url]         : Set the npm mirror. Defaults to https://github.com/npm/cli/archive/. Leave [url] blank to default url.
  nvm uninstall &amp;lt;version&amp;gt;      : The version must be a specific version.
  nvm use [version] [arch]     : Switch to use the specified version. Optionally use &quot;latest&quot;, &quot;lts&quot;, or &quot;newest&quot;.
                                 &quot;newest&quot; is the latest installed version. Optionally specify 32/64bit architecture.
                                 nvm use &amp;lt;arch&amp;gt; will continue using the selected version, but switch to 32/64 bit mode.
  nvm root [path]              : Set the directory where nvm should store different versions of node.js.
                                 If &amp;lt;path&amp;gt; is not set, the current root will be displayed.
  nvm [--]version              : Displays the current running version of nvm for Windows. Aliased as v.
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;安装16.6.0版本，可以使用以下命令&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nvm install 16.6.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;nvm 遵守&lt;a href=&quot;http://semver.org/lang/zh-CN/&quot;&gt;语义化版本&lt;/a&gt;命名规则。例如，你想安装最新的 &lt;strong&gt;&lt;code&gt;16.6&lt;/code&gt;&lt;/strong&gt; 系列的最新的一个版本的话，可以运行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nvm install 16.2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;nvm 会寻找 &lt;code&gt;16.6.x&lt;/code&gt; 中最高的版本来安装。&lt;/p&gt;
&lt;p&gt;你可以通过以下命令来列出远程服务器上所有的可用版本：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nvm ls available
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;在不同版本间切换&lt;/h3&gt;
&lt;p&gt;每当我们安装了一个新版本 Node 后，全局环境会自动把这个新版本设置为默认。&lt;/p&gt;
&lt;p&gt;nvm 提供了 &lt;code&gt;nvm use&lt;/code&gt; 命令。这个命令的使用方法和 &lt;code&gt;install&lt;/code&gt; 命令类似。&lt;/p&gt;
&lt;p&gt;例如，切换到 &lt;code&gt;16.6.2&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nvm use 16.6.2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;切换到最新的 &lt;code&gt;16.6.x&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nvm use 16.6
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;列出已安装实例&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;nvm ls
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当前正在使用的版本会被标注成 &lt;code&gt;Currently using 64-bit executable&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;在项目中使用不同版本的 Node&lt;/h3&gt;
&lt;p&gt;我们可以通过创建项目目录中的 &lt;code&gt;.nvmrc&lt;/code&gt; 文件来指定要使用的 Node 版本。之后在项目目录中执行 &lt;code&gt;nvm use&lt;/code&gt; 即可。&lt;code&gt;.nvmrc&lt;/code&gt; 文件内容只需要遵守上文提到的语义化版本规则即可。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;.nvmrc&lt;/code&gt; 文件内容如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;v14.21.3
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;完。&lt;/p&gt;
</content:encoded></item><item><title>npm,yarn,pnpm</title><link>https://www.hhtianyi.com/posts/npm/npm-yarn-pnpm/</link><guid isPermaLink="true">https://www.hhtianyi.com/posts/npm/npm-yarn-pnpm/</guid><description>命令对比 npm yarn pnpm npm install yarn pnpm install / pnpm i npm install...</description><pubDate>Mon, 21 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;命令对比&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;npm&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;yarn&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;pnpm&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;npm install&lt;/td&gt;
&lt;td&gt;yarn&lt;/td&gt;
&lt;td&gt;pnpm install / pnpm i&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;npm install react –save&lt;/td&gt;
&lt;td&gt;yarn add react&lt;/td&gt;
&lt;td&gt;pnpm add react&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;npm uninstall react –save&lt;/td&gt;
&lt;td&gt;yarn remove react&lt;/td&gt;
&lt;td&gt;pnpm remove react / pnpm rm react&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;npm install react –save-dev&lt;/td&gt;
&lt;td&gt;yarn add react –dev&lt;/td&gt;
&lt;td&gt;pnpm add react -D&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;npm update –save&lt;/td&gt;
&lt;td&gt;yarn upgrade&lt;/td&gt;
&lt;td&gt;pnpm update&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;查看全局安装过的包&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;npm list -g --depth 0
pnpm list -g --depth 0
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;查看正在使用的软件源&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;npm config get registry
npm config list
pnpm config get registry
pnpm config list
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;设置软件源&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 官方源npm config set registry https://registry.npmjs.org/
yarn config set registry https://registry.npmjs.org/
pnpm config set registry https://registry.npmjs.org/
# 阿里镜像源pnpm config set registry https://registry.npmmirror.com/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在项目中创建&lt;code&gt;.npmrc&lt;/code&gt;文件配置软件源&lt;/p&gt;
&lt;h3&gt;.npmrc的作用&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;.npmrc&lt;/code&gt;，可以理解成&lt;code&gt;npm running cnfiguration&lt;/code&gt;, 即&lt;code&gt;npm&lt;/code&gt;运行时配置文件。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;npm按照如下顺序读取这些配置文件：&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;项目配置文件：你可以在项目的根目录下创建一个&lt;code&gt;.npmrc&lt;/code&gt;文件，只用于管理这个项目的&lt;code&gt;npm&lt;/code&gt;安装。&lt;/li&gt;
&lt;li&gt;用户配置文件：在你使用一个账号登陆的电脑的时候，可以为当前用户创建一个&lt;code&gt;.npmrc&lt;/code&gt;文件，之后用该用户登录电脑，就可以使用该配置文件。可以通过 &lt;code&gt;npm config get userconfig&lt;/code&gt; 来获取该文件的位置。&lt;/li&gt;
&lt;li&gt;全局配置文件： 一台电脑可能有多个用户，在这些用户之上，你可以设置一个公共的&lt;code&gt;.npmrc&lt;/code&gt;文件，供所有用户使用。该文件的路径为：&lt;code&gt;$PREFIX/etc/npmrc&lt;/code&gt;，使用 &lt;code&gt;npm config get prefix&lt;/code&gt; 获取&lt;code&gt;$PREFIX&lt;/code&gt;。如果你不曾配置过全局文件，该文件不存在。&lt;/li&gt;
&lt;li&gt;npm内嵌配置文件：最后还有npm内置配置文件，基本上用不到，不用过度关注。&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;如何设置.npmrc&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;设置项目配置文件&lt;/p&gt;
&lt;p&gt;在项目的根目录下新建 &lt;code&gt;.npmrc&lt;/code&gt; 文件，在里面以 &lt;code&gt;key=value&lt;/code&gt; 的格式进行配置。比如要把npm的源配置为淘宝源，可以参考以下代码：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;registry=https://registry.npmmirror.com/
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;设置用户配置文件&lt;/p&gt;
&lt;p&gt;你可以直接通过 &lt;code&gt;npm config get userconfig&lt;/code&gt; 命令找到该文件的路径，然后直接仿照上述方法该文件，也可以通过 &lt;code&gt;npm config set&lt;/code&gt; 命令继续设置，命令如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;npm config set registry https://registry.npmmirror.com/
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;设置全局配置文件&lt;/p&gt;
&lt;p&gt;方法和设置用户配置文件如出一辙，只不过在使用命令行时需要加上 &lt;code&gt;-g&lt;/code&gt; 参数。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;npm config set registry https://registry.npmmirror.com/ -g
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;解决因为node或者npm版本过高导致依赖安装不上的问题&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;建议使用 nvm 切换 nodejs 版本&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;npx -p npm@6 npm i --legacy-peer-depsnpx -p npm@7 npm i --legacy-peer-deps
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;npm和pnpm执行npm包中的可执行文件工具&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# npm
npx eslint --init
# pnpm
pnpm dlx eslint --init
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;完。&lt;/p&gt;
</content:encoded></item></channel></rss>