nrm安装后运行报错解决办法
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
.