使用 NVM-Windows、Node v17、NPM v8 时,npm install 出现未知错误“npm ERR!意外的令牌‘.’”

yod*_*ama 28 windows node.js npm nvm

这似乎是一个半常见的错误,但我不清楚是什么原因造成的。我想知道是什么导致了这个错误以及如何解决它。

使用 NVM,我安装了 Node @latest(版本 17.4.0),它安装了 npm 的匹配最新版本(v8.3.1)。

PS C:\myRepo> node -v
v17.4.0
PS C:\myRepo> npm -v
8.3.1
PS C:\myRepo> nvm list

  * 17.4.0 (Currently using 64-bit executable)
    17.0.0
    15.6.0
    14.18.3
    14.15.4
    12.20.1
Run Code Online (Sandbox Code Playgroud)

然后我从 npm 安装一个包依赖项,无论包名称如何,它都会给我一个错误:

PS C:\myRepo> npm install -g npm
npm ERR! Unexpected token '.'

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\yodama\AppData\Local\npm-cache\_logs\2022-01-25T16_38_44_607Z-debug-0.log

Run Code Online (Sandbox Code Playgroud)

我们可以看到完整的调试日志:

0 verbose cli [
0 verbose cli   'C:\\Program Files\\nodejs\\node.exe',
0 verbose cli   'C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js',
0 verbose cli   'install',
0 verbose cli   '-g',
0 verbose cli   'npm'
0 verbose cli ]
1 info using npm@8.3.1
2 info using node@v17.4.0
3 timing npm:load:whichnode Completed in 0ms
4 timing config:load:defaults Completed in 1ms
5 timing config:load:file:C:\Users\yodama\AppData\Roaming\nvm\v17.4.0\node_modules\npm\npmrc Completed in 3ms
6 timing config:load:builtin Completed in 3ms
7 timing config:load:cli Completed in 3ms
8 timing config:load:env Completed in 0ms
9 timing config:load:project Completed in 3ms
10 timing config:load:file:C:\Users\yodama\.npmrc Completed in 4ms
11 timing config:load:user Completed in 4ms
12 timing config:load:file:C:\Program Files\nodejs\etc\npmrc Completed in 0ms
13 timing config:load:global Completed in 0ms
14 timing config:load:validate Completed in 0ms
15 timing config:load:credentials Completed in 1ms
16 timing config:load:setEnvs Completed in 1ms
17 timing config:load Completed in 19ms
18 timing npm:load:configload Completed in 20ms
19 timing npm:load:setTitle Completed in 1ms
20 timing config:load:flatten Completed in 4ms
21 timing npm:load:display Completed in 7ms
22 verbose logfile C:\Users\yodama\AppData\Local\npm-cache\_logs\2022-01-25T16_38_44_607Z-debug-0.log
23 timing npm:load:logFile Completed in 13ms
24 timing npm:load:timers Completed in 0ms
25 timing npm:load:configScope Completed in 0ms
26 timing npm:load Completed in 42ms
27 verbose stack C:\Users\yodama\AppData\Roaming\nvm\v17.4.0\node_modules\npm\node_modules\libnpmfund:1
27 verbose stack ../workspaces/libnpmfund
27 verbose stack ^
27 verbose stack
27 verbose stack SyntaxError: Unexpected token '.'
27 verbose stack     at Object.compileFunction (node:vm:352:18)
27 verbose stack     at wrapSafe (node:internal/modules/cjs/loader:1026:15)
27 verbose stack     at Module._compile (node:internal/modules/cjs/loader:1061:27)
27 verbose stack     at Object.Module._extensions..js (node:internal/modules/cjs/loader:1149:10)
27 verbose stack     at Module.load (node:internal/modules/cjs/loader:975:32)
27 verbose stack     at Function.Module._load (node:internal/modules/cjs/loader:822:12)
27 verbose stack     at Module.require (node:internal/modules/cjs/loader:999:19)
27 verbose stack     at require (node:internal/modules/cjs/helpers:102:18)
27 verbose stack     at Object.<anonymous> (C:\Users\yodama\AppData\Roaming\nvm\v17.4.0\node_modules\npm\lib\utils\reify-output.js:16:38)
27 verbose stack     at Module._compile (node:internal/modules/cjs/loader:1097:14)
28 verbose cwd C:\myRepo
29 verbose Windows_NT 10.0.22000
30 verbose argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "-g" "npm"
31 verbose node v17.4.0
32 verbose npm  v8.3.1
33 error Unexpected token '.'
34 verbose exit 1
35 timing npm Completed in 262ms
36 verbose code 1
Run Code Online (Sandbox Code Playgroud)

将 Windows 版 nvm 切换到 Node 14 修复了此问题:


PS C:\myRepo> nvm use 14.18.3
Now using node v14.18.3 (64-bit)
PS C:\myRepo> node -v 
v14.18.3
PS C:\myRepo> npm -v
6.14.15
PS C:\myRepo> npm i -g @microsoft/rush
npm WARN deprecated @opentelemetry/types@0.2.0: Package renamed to @opentelemetry/api, see https://github.com/open-telemetry/opentelemetry-js
C:\Program Files\nodejs\rush -> C:\Program Files\nodejs\node_modules\@microsoft\rush\bin\rush
C:\Program Files\nodejs\rushx -> C:\Program Files\nodejs\node_modules\@microsoft\rush\bin\rushx
+ @microsoft/rush@5.61.1
added 286 packages from 296 contributors in 26.69s
Run Code Online (Sandbox Code Playgroud)

这里出了什么问题?这是 NVM 问题还是 npm 8.x 问题?我需要在 Node v17 中针对特定错误进行测试,因此仅使用旧版本的 Node 并不是一个可行的解决方法。

小智 42

将 NVM-Windows 更新到最新版本,目前为止 1.1.9

他们已经解决了这个问题,工作区文件夹必须是符号链接。

问题出在 NVM-Windows 而不是 NPM

  • 我还需要卸载已安装的“node”并再次安装(使用新的“nvm”) (19认同)
  • 我已经升级到版本了,还是没有解决问题。 (8认同)

小智 7

  1. 安装 NVM 的更新版本
  2. 卸载节点版本
  3. 重新安装节点

这解决了我的问题


小智 5

使用较低版本的节点。

nvm list-> 查看已安装的节点版本。

nvm use <-version number->

再次运行npm install