我目前已经通过Winget安装了最新的NodeJS(v19.9.0).通过Git Bash使用它工作得很好,但是如果我try 通过PowerShell或Windows终端使用它,node命令就可以工作得很好,但try 使用npm将导致以下错误:

node:internal/modules/cjs/loader:1093
  throw err;
  ^

Error: Cannot find module 'C:\Program Files\nodejs\node_modules\npm\bin\node_modules\npm\bin\npm-cli.js'
    at Module._resolveFilename (node:internal/modules/cjs/loader:1090:15)
    at Module._load (node:internal/modules/cjs/loader:934:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:83:12)
    at node:internal/main/run_main_module:23:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

Node.js v19.9.0
node:internal/modules/cjs/loader:1093
  throw err;
  ^

Error: Cannot find module 'C:\Program Files\nodejs\node_modules\npm\bin\node_modules\npm\bin\npm-cli.js'
    at Module._resolveFilename (node:internal/modules/cjs/loader:1090:15)
    at Module._load (node:internal/modules/cjs/loader:934:27)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:83:12)
    at node:internal/main/run_main_module:23:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

Node.js v19.9.0

我已经try 了通过官方网站下载重新安装Node,也重新安装了Windows终端/PowerShell. 我还删除了临时文件,并确保正确配置了PATH环境变量.

推荐答案

tl;dr

Remove the following directory from your persistent 100 environment-variable definition通过注册表(运行sysdm.cpl,转到Advanced选项卡,然后单击Environment variables...)或以其他方式确保它不会成为PowerShell会话中$env:Path的一部分:

C:\Program Files\nodejs\node_modules\npm\bin

Only 100 should be in 101,它包含正确的CLI入口点npm.cmd,以及Node.js可执行文件node.exex`


C:\Program Files\nodejs的子树中有multiplenpm.cmd个文件,它们都在位置relative to their own中查找npm-cli.jsnpm.js.

C:\Program Files\nodejs\node.cmdC:\Program Files\nodejs\node_modules\npm\bin\node.cmdidentical,并使用以下路径找到实际的.js入口点npm-cli.js,它通过node.exe启动:

SET "NPM_CLI_JS=%~dp0\node_modules\npm\bin\npm-cli.js"

也就是说,在npm.cmd所在的同一目录的子文件夹.\node_modules\npm\bin中查找npm-cli.js.

This only works for C:\Program Files\nodejs\node.cmd, not for C:\Program Files\nodejs\node_modules\npm\bin\node.cmd, which ends up looking for
C:\Program Files\nodejs\node_modules\npm\bin\node_modules\npm\bin\npm-cli.js - note the doubled node_modules\npm\bin part - which doesn't exist.

在您的例子中,$env:Path中错误的C:\Program Files\nodejs\node_modules\npm\bin条目显然来自正确的C:\Program Files\nodejs条目,因此执行错误的npm.cmd批处理文件 当您仅使用npm(或npm.cmd)调用命令时.

删除错误的条目应该可以解决这个问题.

通常,如果在仅使用文件名(如npm)时调用了错误的可执行文件,请使用带有-Allswitch 的Get-Command来按优先顺序显示all个这样的可执行文件:列出的firsteffective个;例如:

# Print the full paths of all "npm" executables located in directories
# listed in $env:Path; the first one "wins".
Get-Command npm -All | ForEach-Object Path

Node.js相关问答推荐

npm错误;无法解析依赖项:npm ERR!对等webpack@;5.x.x;来自@webpack-cli/serve@2.0.5";

Puppeteer 在本地运行良好,但在 Heroku 中运行不佳

我的 React + Express 应用程序不断向我的数组添加一个空对象

Express Web 服务器部署到 prod 但 GET 返回超时错误

无法将示例 Node.js 应用程序部署到 AWS Elastic Beanstalk

如何在 Docker 容器中 SSO 登录 AWS(使用 aws-sdk v3)

node-gyp: "..\src\binding.cc: 没有这样的文件或目录"

无法使用 node 预签名 url 从 React 将图像文件上传到 s3

为什么 $or 在带有正则表达式的mongoose 中不能正常工作

将 express js app.use() 移动到另一个文件

node Axios 创建全局令牌变量以在单独的变量头中使用

使用`useLocalStorage`和`useDebounce`时如何解决Next.js中的react-hydration-error

如何使用 node 在 koa.js 中发送响应

Node.js + Express + Handlebars.js + 局部视图

异步函数 - 等待不等待promise

webpack css-loader 在外部样式表的 url() 引用中找不到图像

JavaScript 异步编程:promise 与生成器

如何判断MongoDB本机nodejs驱动程序中是否存在集合?

node.js 服务器和 HTTP/2 (2.0) 与 express.js

如何阻止 babel 将this转换为undefined(并插入use strict)