没 关 系 , 我 在 Windows 上 修复 了 “Unexpected token ‘.’(点错误)” 的故事

nvm是一个用于管理Node.js版本的工具,当想要使用多个Node.js或npm版本时非常方便。然而,在Windows版中,nvm 1.1.7版本会出现以下错误。在GitHub上似乎也进行了长时间的讨论。

$npm init                  
npm ERR! Unexpected token '.'                                                                                                                                                                                                                   
npm ERR! A complete log of this run can be found in:                                                                    
npm ERR!     C:\Users\****\AppData\Local\npm-
cache\_logs\2022-05-19T13_51_46_969Z-debug-0.log   

我将保留下努力修复那一部分历史记录的痕迹

规格

Windows10
nvm v1.1.7(也有一些人在v1.1.9上遇到错误…)
node v16.15.0

在中文中,只需要一個選項去對以下內容進行本地化的改寫:
戶口增長率

只要满足以下的规格,任务就完成了。

$nvm -v
Running version 1.1.7.
$node -v
v16.15.0 (2022年5月現在のLTS)
$npm -v
8.5.5
$npm init
package name: (test)  #この行が出てほしい

解决方案

暫時來說,當出現「Unexpected token ‘.’」錯誤時的錯誤日誌大致如下:

28 verbose stack C:\Users\****\AppData\Roaming\nvm\v16.15.0\node_modules\npm\node_modules\libnpmexec:1
28 verbose stack ../workspaces/libnpmexec
28 verbose stack ^
28 verbose stack

原来如此,如果上一级目录指示符号点没有响应的话。那就用批处理文件来改写吧。
看起来符号链接还是保持着Linux的样式。
那么,如果将相对路径改为绝对路径的话,应该可以工作的。所以我尝试创建了一份我擅长的批处理文件。

@echo off 

rem キーボード入力
set INPUT_VERSION=
set /P INPUT_VERSION="対象のnodejsバージョンを入力してください(例:16.15.0): "

rem 遅延環境変数を設定
setlocal ENABLEDELAYEDEXPANSION

rem ディレクトリ移動
cd %NVM_HOME%\v%INPUT_VERSION%\node_modules\npm\node_modules

rem 今回対象となるlibnpmで始まるファイルをfor文で処理
for %%a in (libnpm*) do (

  rem 変数に上書きしたいパスを代入
  set line="%NVM_HOME%\v%INPUT_VERSION%\node_modules\npm\workspaces\%%a"

  rem ファイルを上書き
  echo !line! > %%a
)

echo 上書きに成功しました。
pause
exit /b
endlocal

我花了5个小时的时间,但总算是成功解决了与符号链接的斗争!我试了许多方法,比如在Windows上使用双反斜杠,或者倒斜杠等等,但最终证明使用双引号将绝对路径括起来才是正确的方法。哎呀~问题解决了真是太好了!如果你不想在自己的环境中重新安装nvm之类的话,务必使用这个解决方法!!!

附言。

希望能够将包括Node.js版本的路径作为变量获取,但是这次只能按所找到的方式,所以路径变得非常长。我会在有时间的时候再进行搜索(应该有的)。如果有人知道的话,请随意留下评论,谢谢。

广告
将在 10 秒后关闭
bannerAds