Vue多种高效删除node_modules的方法
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">1.使用专用删除工具(推荐)</a></li><ul class="second_class_ul"><li><a href="#_lab2_0_0">rimraf(跨平台)</a></li><li><a href="#_lab2_0_1">快速删除工具</a></li></ul><li><a href="#_label1">2.使用系统命令</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_2">Windows</a></li><li><a href="#_lab2_1_3">macOS/Linux</a></li></ul><li><a href="#_label2">3.使用包管理器的功能</a></li><ul class="second_class_ul"><li><a href="#_lab2_2_4">PNPM</a></li><li><a href="#_lab2_2_5">Yarn</a></li></ul><li><a href="#_label3">4.使用脚本/自动化</a></li><ul class="second_class_ul"><li><a href="#_lab2_3_6">创建删除脚本</a></li></ul><li><a href="#_label4">5.预防和优化</a></li><ul class="second_class_ul"><li><a href="#_lab2_4_7">使用.npmrc配置</a></li><li><a href="#_lab2_4_8">使用Docker容器</a></li><li><a href="#_lab2_4_9">使用工作区(Monorepo)</a></li></ul><li><a href="#_label5">6.进阶技巧</a></li><ul class="second_class_ul"><li><a href="#_lab2_5_10">并行删除(Linux/macOS)</a></li><li><a href="#_lab2_5_11">使用rsync(空目录替换)</a></li></ul><li><a href="#_label6">最佳实践建议</a></li><ul class="second_class_ul"></ul><li><a href="#_label7">一键清理脚本</a></li><ul class="second_class_ul"></ul></ul></div><p>删除 <code>node_modules</code> 慢是常见问题,这里有几种高效方法:</p><p class="maodian"><a name="_label0"></a></p><h2>1.使用专用删除工具(推荐)</h2>
<p class="maodian"><a name="_lab2_0_0"></a></p><h3>rimraf(跨平台)</h3>
<div class="jb51code"><pre class="brush:bash;"># 全局安装
npm install -g rimraf
# 在项目目录执行
rimraf node_modules
# 或使用npx(无需全局安装)
npx rimraf node_modules</pre></div>
<p class="maodian"><a name="_lab2_0_1"></a></p><h3>快速删除工具</h3>
<div class="jb51code"><pre class="brush:bash;"># 1. del-cli
npx del-cli node_modules
# 2. trash-cli (macOS/Linux)
npm install -g trash-cli
trash node_modules</pre></div>
<p class="maodian"><a name="_label1"></a></p><h2>2.使用系统命令</h2>
<p class="maodian"><a name="_lab2_1_2"></a></p><h3>Windows</h3>
<div class="jb51code"><pre class="brush:bash;"># 使用rd命令(最快)
rmdir /s /q node_modules
# 或PowerShell
Remove-Item -Recurse -Force node_modules</pre></div>
<p class="maodian"><a name="_lab2_1_3"></a></p><h3>macOS/Linux</h3>
<div class="jb51code"><pre class="brush:bash;"># 使用rm命令
rm -rf node_modules
# 如果需要sudo权限
sudo rm -rf node_modules</pre></div>
<p class="maodian"><a name="_label2"></a></p><h2>3.使用包管理器的功能</h2>
<p class="maodian"><a name="_lab2_2_4"></a></p><h3>PNPM</h3>
<div class="jb51code"><pre class="brush:bash;"># pnpm自动清理
pnpm store prune
# 删除node_modules
pnpm dlx rimraf node_modules</pre></div>
<p class="maodian"><a name="_lab2_2_5"></a></p><h3>Yarn</h3>
<div class="jb51code"><pre class="brush:bash;"># Yarn 2+ 有自动清理
yarn cache clean</pre></div>
<p class="maodian"><a name="_label3"></a></p><h2>4.使用脚本/自动化</h2>
<p class="maodian"><a name="_lab2_3_6"></a></p><h3>创建删除脚本</h3>
<p><strong>delete-nm.js:</strong></p>
<div class="jb51code"><pre class="brush:js;">const fs = require('fs');
const path = require('path');
function deleteNodeModules(dir) {
if (fs.existsSync(dir)) {
fs.readdirSync(dir).forEach(file => {
const curPath = path.join(dir, file);
if (fs.lstatSync(curPath).isDirectory()) {
deleteNodeModules(curPath);
} else {
fs.unlinkSync(curPath);
}
});
fs.rmdirSync(dir);
}
}
deleteNodeModules('./node_modules');</pre></div>
<p class="maodian"><a name="_label4"></a></p><h2>5.预防和优化</h2>
<p class="maodian"><a name="_lab2_4_7"></a></p><h3>使用.npmrc配置</h3>
<div class="jb51code"><pre class="brush:js;"># 防止生成package-lock副本
package-lock=false
# 使用符号链接(Windows)
node-linker=hoisted</pre></div>
<p class="maodian"><a name="_lab2_4_8"></a></p><h3>使用Docker容器</h3>
<div class="jb51code"><pre class="brush:bash;"># 在Docker中操作
docker run --rm -v "$(pwd):/app" node:alpine sh -c "cd /app && rm -rf node_modules"</pre></div>
<p class="maodian"><a name="_lab2_4_9"></a></p><h3>使用工作区(Monorepo)</h3>
<div class="jb51code"><pre class="brush:js;">{
"workspaces": ["packages/*"],
"scripts": {
"clean": "lerna clean -y"
}
}</pre></div>
<p class="maodian"><a name="_label5"></a></p><h2>6.进阶技巧</h2>
<p class="maodian"><a name="_lab2_5_10"></a></p><h3>并行删除(Linux/macOS)</h3>
<div class="jb51code"><pre class="brush:bash;"># 使用find并行删除
find . -name "node_modules" -type d -prune -exec rm -rf '{}' +</pre></div>
<p class="maodian"><a name="_lab2_5_11"></a></p><h3>使用rsync(空目录替换)</h3>
<div class="jb51code"><pre class="brush:bash;"># 创建一个空目录,然后用它替换node_modules
mkdir empty_dir
rsync -a --delete empty_dir/ node_modules/
rmdir empty_dir node_modules</pre></div>
<p class="maodian"><a name="_label6"></a></p><h2>最佳实践建议</h2>
<ol><li><strong>定期清理</strong>:不要等到 <code>node_modules</code> 非常大时才删除</li><li><strong>使用.gitignore</strong>:确保不会误提交到版本控制</li><li><strong>按需安装</strong>:使用 <code>npm ci --only=production</code> 只安装生产依赖</li><li><strong>考虑使用pnp模式</strong>:Yarn 2+ 的 Plug’n’Play 可以避免生成node_modules</li></ol>
<p class="maodian"><a name="_label7"></a></p><h2>一键清理脚本</h2>
<p>创建 <code>cleanup.sh</code>:</p>
<div class="jb51code"><pre class="brush:bash;">#!/bin/bash
echo "正在清理node_modules..."
find . -name "node_modules" -type d -prune | xargs -I {} sh -c 'echo "删除 {}" && rm -rf {}'
echo "清理完成!"</pre></div>
<p><strong>总结</strong>:推荐使用 <code>rimraf</code> 或系统原生命令,它们通常比手动删除快10倍以上。对于超大型项目,可以考虑使用专门的清理工具或优化项目结构。</p>
頁:
[1]