Skip to content

Node

删除node_modules

Node.js社区公认的神器——rimraf

操作步骤

  1. 全局安装rimraf

    (仅需一次):

    bash
    bash
    
     体验AI代码助手
     代码解读
    复制代码npm install rimraf -g
  2. 一键删除:进入项目根目录,执行:

    bash
    rimraf node_modules

    实测:一个5GB的10秒内删干净!

    进阶用法

    • 集成到npm脚本:在package.json

      中添加脚本,直接运行npm run clean:

      json
      {
        "scripts": {
          "clean": "rimraf node_modules"
        }
      }
    • 跨平台兼容:无论是Windows、Linux还是macOS,命令完全一致,团队协作无压力。

    Windows用户:用命令行暴力删除

    • CMD命令:

      bash
      bash
      rmdir /s /q node_modules

      /s表示递归删除,/q表示静默执行(不弹窗确认)。

      • PowerShell(更快):

        powershell
        powershell
        Remove-Item -Force -Recurse node_modules

2. Linux/macOS用户:终端直接起飞

bash
bash
rm -rf ./node_modules

开启子线程

js
//main.js
import { Worker, isMainThread } from 'worker_threads';
import worker_1 from '../../../resources/worker_1.js?asset';
export function runWorker_1(data) {
  return new Promise((resolve, reject) => {
    if (isMainThread) {
      let worker = new Worker(worker_1, {
        workerData: data,
      });
      console.log(worker);
      worker.on('message', (result) => {
        switch (result.status) {
          case 0: //识别进度
            break;
          case 1: //识别成功
            resolve(result.data);
            break;
        }
      });
      // 监听工作线程的错误事件
      worker.on('error', (error) => {
        reject(error);
        console.error('Worker error:', error);
      });

      // 监听工作线程的退出事件
      worker.on('exit', (code) => {
        if (code !== 0) {
          console.error(`Worker stopped with exit code ${code}`);
        }
      });

      // 向工作线程发送消息
      worker.postMessage(data);
    }
  });
}

electron中开启子进程

js
//main.js
import { fork } from 'child_process';
import worker from '../../../resources/worker.js?asset';
import { getByNameWindow } from '../windows';
let child;
export function runWorker(data) {
  return new Promise((resolve, reject) => {
    let mainWindow = getByNameWindow('main');
    // 创建子进程
    child = fork(worker);

    // 向子进程发送数据
    child.send(data);

    // 监听子进程的消息
    child.on('message', (result) => {
      switch (result.status) {
        case 0: //识别进度
          mainWindow.send('task-progress', result.data); //向渲染进程发送识别进度
          break;
        case 1: //识别成功
          resolve(result.data);
          child.kill('SIGTERM');
          break;
        case 2: //识别失败
          reject({ data: result.data, error: result.error });
          child.kill('SIGTERM');
          break;
      }
    });
  });
}
js
//worker.js
process.on('message', async (data) => {
  switch (data.type) {
    case 'runTask':
      runTaskHandle(data.data);
      break;
    case 'stopTask':
      isStop = true;
      break;
  }
});
function runTaskHandle(data){
    process.send(data)
}

node中使用better-sqlite3

js
const sqlite3 = require('better-sqlite3');
// 打开数据库,如果文件不存在会在目录下创建改文件
const DB = sqlite3('./example.db');
// 启用外键约束
DB.exec('PRAGMA foreign_keys = ON;');
// 创建表
DB.prepare(
  'CREATE TABLE IF NOT EXISTS users(id TEXT PRIMARY KEY, name TEXT,task TEXT)' 
).run();//创建users表 IF NOT EXISTS表示如果存在就不创建
const insert = DB.prepare('INSERT INTO users (id, name) VALUES (@id, @name)');
export const insertUser = DB.transaction((user) => {
  insert.run(user);
});//DB.transaction()表示如果执行异常会回滚数据库 不会对数据产生影响

npm清除缓存

shell
npm cache clean --force

安装模型相关依赖报错

bash
npm ERR! code 1
npm ERR! path E:\mine\node-master\node_modules\sharp
npm ERR! command failed
npm ERR! command C:\Windows\system32\cmd.exe /d /s /c (node install/libvips && node install/dll-copy && prebuild-install) || (node install/can-compile && node-gyp rebuild && node install/dll-copy)
npm ERR! sharp: Using cached D:\node\node_cache\_libvips\libvips-8.14.5-win32-x64.tar.br
npm ERR! sharp: Integrity check passed for win32-x64
npm ERR! sharp: Creating E:\mine\node-master\node_modules\sharp\build\Release
npm ERR! sharp: Copying DLLs from E:\mine\node-master\node_modules\sharp\vendor\8.14.5\win32-x64\lib to E:\mine\node-master\node_modules\sharp\build\Release
npm ERR! prebuild-install warn install socket hang up
npm ERR! gyp info it worked if it ends with ok
npm ERR! gyp info using node-gyp@10.0.1
npm ERR! gyp info using node@18.20.1 | win32 | x64
npm ERR! gyp info find Python using Python version 3.12.4 found at "D:\Program Files\python\python.exe"
npm ERR! gyp ERR! find VS 
npm ERR! gyp ERR! find VS msvs_version was set from command line or npm config
npm ERR! gyp ERR! find VS - looking for Visual Studio version 2022
npm ERR! gyp ERR! find VS VCINSTALLDIR not set, not running in VS Command Prompt
npm ERR! gyp ERR! find VS checking VS2022 (17.10.35122.118) found at:
npm ERR! gyp ERR! find VS "C:\Program Files\Microsoft Visual Studio\2022\Community"
npm ERR! gyp ERR! find VS - found "Visual Studio C++ core features"
npm ERR! gyp ERR! find VS - missing any VC++ toolset
npm ERR! gyp ERR! find VS could not find a version of Visual Studio 2017 or newer to use
npm ERR! gyp ERR! find VS looking for Visual Studio 2015
npm ERR! gyp ERR! find VS - not found
npm ERR! gyp ERR! find VS not looking for VS2013 as it is only supported up to Node.js 8
npm ERR! gyp ERR! find VS
npm ERR! gyp ERR! find VS valid versions for msvs_version:
npm ERR! gyp ERR! find VS
npm ERR! gyp ERR! find VS **************************************************************
npm ERR! gyp ERR! find VS You need to install the latest version of Visual Studio
npm ERR! gyp ERR! find VS including the "Desktop development with C++" workload.
npm ERR! gyp ERR! find VS For more information consult the documentation at:
npm ERR! gyp ERR! find VS https://github.com/nodejs/node-gyp#on-windows
npm ERR! gyp ERR! find VS **************************************************************
npm ERR! gyp ERR! find VS
npm ERR! gyp ERR! configure error
npm ERR! gyp ERR! stack Error: Could not find any Visual Studio installation to use
npm ERR! gyp ERR! stack at VisualStudioFinder.fail (D:\Program Files\nvm\v18.20.1\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:113:11)
npm ERR! gyp ERR! stack at VisualStudioFinder.findVisualStudio (D:\Program Files\nvm\v18.20.1\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:69:17)
npm ERR! gyp ERR! stack at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
npm ERR! gyp ERR! stack at async createBuildDir (D:\Program Files\nvm\v18.20.1\node_modules\npm\node_modules\node-gyp\lib\configure.js:69:26)   
npm ERR! gyp ERR! stack at async run (D:\Program Files\nvm\v18.20.1\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js:81:18)
npm ERR! gyp ERR! System Windows_NT 10.0.22631
npm ERR! gyp ERR! command "D:\\Program Files\\nodejs\\node.exe" "D:\\Program Files\\nvm\\v18.20.1\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
npm ERR! gyp ERR! cwd E:\mine\node-master\node_modules\sharp
npm ERR! gyp ERR! node -v v18.20.1
npm ERR! gyp ERR! node-gyp -v v10.0.1
npm ERR! gyp ERR! not ok
  1. 安装包含必要组件的 Visual Studio

    • 下载并安装 Visual Studio Community
    • 在安装过程中,选择“使用C++的桌面开发”工作负载。确保包含以下组件:
      • MSVC v143 - VS 2022 C++ x64/x86 构建工具
      • Windows 10 SDK (10.0.20348.0)
  2. 确保 Python 正确安装并可访问

    • 确保已安装 Python 3.x 并将其添加到 PATH 中。你可以通过在命令提示符中运行 python --version 来验证这一点。

      bash
      npm config set python D:\\Program Files\\python\\python.exe
  3. 清理 npm 缓存并重新安装

    • 运行以下命令以清理 npm 缓存并重试安装:

      bash
      bash复制代码npm cache clean --force
      npm install
  4. 将 msvs_version 变量设置为正确的 Visual Studio 版本

    • 你可以在 npm 配置中设置

      msvs_version

      变量,以明确使用已安装的 Visual Studio 版本。在终端中运行以下命令:

      bash
      复制代码
      npm config set msvs_version 2022
  5. 检查现有安装和配置

    • 确保没有与 Visual Studio 或其他构建工具冲突的安装,这可能会干扰 node-gyp

完成这些步骤后,尝试再次运行 npm install @xenova/transformers。如果问题仍然存在,请提供新的错误日志以便进一步协助。

快速删除node_modules(使用rimraf

借助一个命令行工具rimraf即可实现秒删除,如下是具体的操作流程:

(1)先全局安装 rimraf

shell
npm install -g rimraf

(2)执行命令删除

shell
rimraf node_modules

使用npx:

shell
npx rimraf node_modules

删除设备上所有的node_modules(npkkill)

使用Volta

更改Volta安装路径

windows安装前先设置环境变量

通过环境变量 VOLTA_HOME 指定 Volta 的安装路径。

步骤:

  1. 打开“环境变量”设置:

    • 右键点击“此电脑”或“我的电脑”,选择“属性”。
    • 点击“高级系统设置”。
    • 在“系统属性”窗口中,点击“环境变量”。
  2. 添加新的系统变量:

    • 在“系统变量”部分,点击“新建”。
    • 输入以下内容:
      • 变量名: VOLTA_HOME
      • 变量值: 自定义路径(例如 D:\Program Files\Volta
  3. 点击“确定”保存。

  4. bash
    # 在终端使用命令安装
    winget install Volta.Volta
  5. 默认安装路径是在C:\Program Files\Volta,将C:\Program Files\Volta文件下的内容复制到D:\Program Files\Volta文件下,然后删除C:\Program Files\Volta。

  6. 修改环境变量。在系统环境变量中找到Path,点进去,找到C:\Program Files\Volta,将其修改成D:\Program Files\Volta或者使用上面定义的变%VOLTA_HOME%

设置镜像源hooks.json文件路径

全局配置路径

Linux/MacOS中 ~/.volta/hooks.json Windows中 %LOCALAPPDATA%\Volta\hooks.json

项目配置

在项目的.volta 子目录中指定的钩子(<PROJECT ROOT>/.volta/hooks.json)将只在该项目中应用。这里的 <PROJECT ROOT> 被定义为 package.json 所在目录。

hooks.json文件配置

{
  "node": {
    "index": {
      "template": "https://mirrors.aliyun.com/nodejs-release/index.json"
    },
    "latest": {
      "prefix": "https://mirrors.aliyun.com/nodejs-release/"
    },
    "distro": {
      "template": "https://mirrors.aliyun.com/nodejs-release/v{{version}}/{{filename}}"
    }
  },
  "npm": {
    "index": {
      "prefix": "http://mirrors.tencent.com/npm/"
    },
    "latest": {
      "bin": "~/npm-latest"
    },
    "distro": {
      "template": "https://mirrors.tencent.com/npm/npm/-/npm-{{version}}.tgz"
    }
  },
  "pnpm": {
    "index": {
      "prefix": "http://mirrors.tencent.com/npm/"
    },
    "distro": {
      "template": "https://mirrors.tencent.com/npm/pnpm/-/pnpm-{{version}}.tgz"
    },
    "format": "npm"
  }
}

Volta Node版本安装和控制

Node及pnpm安装

volta install node@18.17.1
volta install pnpm

项目版本固定

volta pin node@18.17.1

node版本管理fnm

安装:

下载地址

image.png

windows下载fnm-windows.zip

image.png

设置环境变量:

image.png

image.png

2 终端脚本设置(这里以 PowerShell 为例)

  • 打开 PowerShell 窗口,输入命令 notepad $profile (如提示找不到文件,按指引创建即可),if (-not **(**Test-Path $profile)) { New-Item $profile -Force }
  • 终端命令notepad $PROFILE 复制添加以下内容: fnm env --use-on-cd --shell powershell | Out-String | Invoke-Expression

使用

powershell
# 查看所有远程可供安装的 Node 版本
fnm list-remote

# 安装node版本
fnm install <version>

# 切换node版本
fnm use <version>

# 查看当前版本
fnm current

# 查看已经安装的node版本
fnm list

# 设置默认版本
fnm default <version>

指定项目node版本

1.package.json 文件中指定:设置以下字段。

{
  “engines”: {
    “node”: “>=18.0.0”
  }
}

自动切换node.js版本

  • 在项目根目录下新建 .node-version 文件
  • 如指定使用 22 大版本的 node.js,在文件中添加以下内容:
# 版本号
v22

写入版本号: 您可以使用以下命令之一来创建文件并写入版本号: 方法一(推荐):使用 node --version 这会将您当前正在使用的 Node.js 版本号写入文件。

powershell
node --version > .node-version

方法二:手动指定版本 将 18.17.0 替换为您需要的版本号。

powershell
echo "18.17.0" > .node-version

fnm配置

image.png

具体释义如下: $env:FNM_NODE_DIST_MIRROR:指定 Node.js 分发包的镜像地址。 $env:FNM_VERSION_FILE_STRATEGY:定义如何处理版本文件。 $env:FNM_ARCH:指定系统的架构类型。 $env:FNM_MULTISHELL_PATH:指定用于管理多 Shell 会话的路径。在使用多个终端或 Shell 的情况下,Fnm 会在该路径下创建相应的目录,以便管理不同 Shell 会话的 Node.js 版本。 $env:FNM_COREPACK_ENABLED:启用或禁用 Corepack。 $env:FNM_RESOLVE_ENGINES:确定是否解析引擎版本。 $env:FNM_LOGLEVEL:设置 Fnm 的日志级别,默认值info,可选值quiet, error, info。 $env:FNM_DIR:指定 Fnm 的安装目录。

设置镜像地址:创建环境变量

image.png

或者终端:notepad $PROFILE 然后输入$env:FNM_NODE_DIST_MIRROR = "https://npmmirror.com/mirrors/node/"

配置npm 全局安装路径

image.png

这样npm install -g pnpm 就会被安装到指定的位置