Node.js的nrm报错:internal/validators.js:125 throw new ERR_INVALID_ARG_TYPE

简介: Node.js的nrm报错:internal/validators.js:125 throw new ERR_INVALID_ARG_TYPE

`OS%FCSV$51@O`Z5VRY7~PH.png

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情


背景


又是换电脑引发的问题,为兼容几年前写的 Node.js 相关项目、客户端应用,换了新主机后,便选择安装相对旧点的 Node 版本: v10.24.0 。然而,全局安装了 nrm 依赖后,执行 nrm ls 报错:


$ nrm ls
internal/validators.js:125
    throw new ERR_INVALID_ARG_TYPE(name, 'string', value);
    ^
TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received type undefined
  at validateString (internal/validators.js:125:11)
  at Object.join (path.js:427:7)  at Object.<anonymous> (E:\Program Files\nodejs\my_global\npm\node_modules\nrm\
cli.js:17:20)
  at Module._compile (internal/modules/cjs/loader.js:778:30)
  at Object. Module._extensions..js (internal/modules/cjs/loader.js:789:10)
  at Module.load (internal/modules/cjs/loader.js:653:32)
  at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
  at Function. Module._load (internal/modules/cjs/loader.js:585:3)
  at Function. Module.runMain (internal/modules/cjs/loader.js:831:12)
  at startup (internal/bootstrap/node.js:283:19)
  at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)

解决


根据经验,这应该是新安装的依赖版本过高导致的问题,那么尝试降低版本(如今,这些开源项目、中间件、三方依赖的更新是真快。。)

[# 查看指定包的可用版本
$ npm view nrm versions
'0.1.0',
  '0.1.1',
  '0.1.2',
  '0.1.4',
  '0.1.5',
  '0.1.6',
  '0.1.7',
  '0.1.8',
  '0.1.9',
  '0.2.0',
  '0.2.1',
  '0.2.2',
  '0.2.3',
  '0.2.4',
  '0.2.5',
  '0.3.0',
  '0.3.1',
  '0.9.0',
  '1.0.0',
  '1.0.1',
  '1.0.2',
  '1.1.0',
  '1.2.0',
  '1.2.1' ]


_[}I7_WR(_$M1}OM2OU0A2Y.png

# 卸载已安装的版本
$ npm uninstall -g nrm
# 选择较低的版本安装(指定版本安装依赖)
$ npm install -g nrm@1.1.0
# 使用taobao镜像或者cnpm
$ nrm use cnpm
# 确认已选择的镜像
$ nrm ls

其它问题


虽然切换为 taobao 等国内镜像,可在安装有些依赖时,依然报错、超时,比如,涉及到 puppeteer 依赖的安装就基本总是不成功的。


$ npm i
> puppeteer@1.3.0 install F:\JavaScript\Node.js\csair\node_modules\puppeteer
> node install.js
ERROR: Failed to download Chromium r549031! Set "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" env variable to skip download.
{ Error: connect ETIMEDOUT 172.217.24.16:443
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
  errno: 'ETIMEDOUT', 
  code: 'ETIMEDOUT', 
  syscall: 'connect', 
  address: '172.217.24.16', 
  port: 443 }
npm WARN koa-auto-post-form@1.0.0 No repository field.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.2 (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.2: wanted {"os":"darwin", "arch":"any"}
(current: {"os":"win32", "arch":"x64"})

这次,需要对 puppeteer 单独设置国内镜像:


$ npm config set puppeteer_download_host=https://npm.taobao.org/mirrors

然后,再次安装依赖即可。


一些扩展


Node.js 的全局依赖包默认是安装在C盘的,可以对这个目录进行配置:


npm install moduleName # 安装到当前目录;
npm install -g moduleName # 安装到全局目录,默认采用最新版;
npm install moduleName@version # 安装指定版本的module,eg: npm install electron@1.6.6
npm config list # 获取当前有关配置信息;
npm config get prefix # 获取当前设置的全局目录;
npm config set prefix "E:\Program Files\nodejs\my_global\npm" # 改变全局目录到"E:\Program Files\nodejs\my_global\npm"
npm uninstall moduleName -g # 卸载全局模块

其实,配置全局 npm 包安装路径、配置镜像都会写入 C:\Users\[用户名]\ 下的 .npmrc 文件,内容即为修改后的路径信息,比如,我的 .npmrc 文件内容是这样的:

prefix=E:\Program Files\nodejs\my_global\npm
home=https://npm.taobao.org
registry=https://registry.npm.taobao.org/
puppeteer_download_host=https://npm.taobao.org/mirrors

所以,当然可通过直接改 .npmrc 文件来实现同样的效果~😊


If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!

目录
相关文章
|
1月前
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
46 1
|
19天前
|
存储 JavaScript NoSQL
Node.js新作《循序渐进Node.js企业级开发实践》简介
《循序渐进Node.js企业级开发实践》由清华大学出版社出版,基于Node.js 22.3.0编写,包含26个实战案例和43个上机练习,旨在帮助读者从基础到进阶全面掌握Node.js技术,适用于初学者、进阶开发者及全栈工程师。
46 9
|
1月前
|
JavaScript 前端开发 中间件
JS服务端技术—Node.js知识点
本文介绍了Node.js中的几个重要模块,包括NPM、Buffer、fs模块、path模块、express模块、http模块以及mysql模块。每部分不仅提供了基础概念,还推荐了相关博文供深入学习。特别强调了express模块的使用,包括响应相关函数、中间件、Router和请求体数据解析等内容。文章还讨论了静态资源无法访问的问题及其解决方案,并总结了一些通用设置。适合Node.js初学者参考学习。
44 1
|
1月前
|
开发框架 JavaScript 前端开发
Node.js日记:客户端和服务端介绍、Node.js介绍
Node.js日记:客户端和服务端介绍、Node.js介绍
|
1月前
|
JavaScript 前端开发 开发工具
Node.js——初识Node.js
Node.js——初识Node.js
35 4
|
1月前
|
JavaScript 前端开发 持续交付
构建现代Web应用:Vue.js与Node.js的完美结合
【10月更文挑战第22天】随着互联网技术的快速发展,Web应用已经成为了人们日常生活和工作的重要组成部分。前端技术和后端技术的不断创新,为Web应用的构建提供了更多可能。在本篇文章中,我们将探讨Vue.js和Node.js这两大热门技术如何完美结合,构建现代Web应用。
41 4
|
1月前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API
使用JavaScript和Node.js构建简单的RESTful API
|
2月前
|
消息中间件 JavaScript 前端开发
用于全栈数据流的 JavaScript、Node.js 和 Apache Kafka
用于全栈数据流的 JavaScript、Node.js 和 Apache Kafka
50 1
|
2月前
|
JavaScript 开发工具 git
已安装nodejs但是安装hexo报错
已安装nodejs但是安装hexo报错
40 2
|
2月前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API服务器
【10月更文挑战第12天】使用JavaScript和Node.js构建简单的RESTful API服务器
27 0