nrm安装后运行报错解决办法

这篇博客详细记录了在安装nrm后遇到运行报错的问题,通过排除Node.js版本原因,找到nrm的cli.js文件,在第17行进行代码修改,注释原有内容并追加新的代码,从而成功修复了问题。最后,经过测试验证,nrm已经可以正常工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

nrm安装后运行报错

安装完nrm后执行nrm命令报错,无论是 nodejs14 还是 nodejs12 都报错, 排除是nodejs版本问题.

报错代码:

// 安装nrm
>npm install -g nrm
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated mkdirp@0.3.5: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)
npm WARN deprecated coffee-script@1.7.1: CoffeeScript on NPM has moved to "coffeescript" (no hyphen)
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
C:\Users\Administrator\AppData\Roaming\npm\nrm -> C:\Users\Administrator\AppData\Roaming\npm\node_modules\nrm\cli.js
+ nrm@1.2.1
added 315 packages from 151 contributors in 32.491s

// 测试nrm命令
>nrm
internal/validators.js:117
    throw new ERR_INVALID_ARG_TYPE(name, 'string', value);
    ^

[TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received undefined
  at validateString (internal/validators.js:117:11)
  at Object.join (path.js:375:7)
  at Object.<anonymous> (C:\Users\Administrator\AppData\Roaming\npm\node_modules\nrm\cli.js:17:20)
  at Module._compile (internal/modules/cjs/loader.js:1158:30)
  at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
  at Module.load (internal/modules/cjs/loader.js:1002:32)
  at Function.Module._load (internal/modules/cjs/loader.js:901:14)
  at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
  at internal/main/run_main_module.js:18:47
] {
   
  code: 'ERR_INVALID_ARG_TYPE'
}

修复办法

找到nvm文件夹安装位置,打开 \npm\node_modules\nrm\cli.js 第17行, 注释此行并在后面一行追加如下内容修改成

//const NRMRC = path.join(process.env.HOME, '.nrmrc'); (删除或者注释掉此行)
const NRMRC = path.join(process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'], '.nrmrc');

修复cli.js后完整代码

#!/usr/bin/env node

const path = require('path');
const fs = require('fs');
const program = require('commander');
const npm = require('npm');
const ini = require('ini');
const echo = require('node-echo');
const extend = require('extend');
const open = require('open');
const async = require('async');
const request = require('request');
const only = require('only');

const registries = require('./registries.json');
const PKG = require('./package.json');
//const NRMRC = path.join(process.env.HOME, '.nrmrc');
const NRMRC = path.join(process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'], '.nrmrc');
const REGISTRY_ATTRS = [];
const FIELD_AUTH = '_auth';
const FIELD_ALWAYS_AUTH = 'always-auth';
const FIELD_IS_CURRENT = 'is-current';
const FIELD_REPOSITORY = 'repository';
const IGNORED_ATTRS = [FIELD_IS_CURRENT, FIELD_REPOSITORY];


program
    .version(PKG.version);

program
    .command('ls')
    .description('List all the registries')
    .action(onList);

program
    .command('current')
    .description('Show current registry name')
    .action(showCurrent);

program
    .command('use <registry>')
    .description('Change registry to registry')
    .action(onUse);

program
    .command('add <registry> <url> [home]')
    .description('Add one custom registry')
    .action(onAdd);

program
    .command('set-auth <registry> [value]')
    .option('-a, --always-auth', 'Set is always auth')
    .option('-u, --username <username>', 'Your user name for this registry')
    .option('-p, --password <password>', 'Your password for this registry')
    .description('Set authorize information for a custom registry with a base64 encoded string or username and pasword')
    .action(onSetAuth);

program
    .command('set-email <registry> <value>')
    .description('Set email for a custom registry')
    .action(onSetEmail);

program
    .
### 解决全局安装 nrm 报错问题 #### 检查并配置 Node.js 和 npm 版本 确保使用的 Node.js 和 npm 是最新稳定版。旧版本可能会引发兼容性问题,从而导致工具如 `nrm` 安装失败。 ```bash node -v npm -v ``` 如果发现版本过低,则应考虑升级至更高版本[^4]。 #### 清除 npm 缓存 有时本地缓存损坏也会造成各种异常情况发生,在尝试重新安装之前可以先清理一下: ```bash npm cache clean --force ``` 这一步有助于排除因缓存数据不一致而引起的潜在冲突。 #### 验证权限设置 对于某些操作系统而言,可能需要管理员权限才能完成全局软件包的安装操作。此时可尝试通过命令前置 `sudo`(Linux/macOS) 或者以管理员身份打开 PowerShell/Command Prompt (Windows)[^1] 来执行安装指令: ```bash sudo npm install nrm -g # Linux/macOS 下使用 sudo 提权 npm install nrm -g # Windows 用户右键点击 CMD/Powershell 选择“以管理员身份运行” ``` #### 修改 nrm 的 cli 文件路径(针对 Windows) 当在 Windows 上遇到特定类型的错误时,一种有效的处理方式是手动调整 `cli.js` 文件的位置使其能够被正确识别。具体做法为查找 npm 全局模块目录并通过编辑器修改其中关于 `nrm` 的部分链接指向实际存在的位置[^3]: 1. 查看 npm 全球库所在地址: ```bash npm root -g ``` 2. 找到上述输出路径下的 `.bin/nrm` 及其对应的 `cli.js` 脚本; 3. 如果存在符号链接失效等问题则修复之; 以上措施综合运用往往能有效缓解乃至彻底消除大部分由于环境因素造成的 `nrm` 工具安装后的不可用状况。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值