본문 바로가기

카테고리 없음

[WSL/nodejs] not foundram Files/nodejs/npm:/mnt/c/Program Files/nodejs/npm: Syntax error: word unexpected (expecting "in")' issue

 

01. 이슈발생

02. 과정

03. 결론 및 해결

 


 

01. 이슈발생

nodejs/npm을 설치한 기억이 없는 WSL내에서 무심결에 npm을 사용하니 다음의 에러가 떨어졌다.

white@DESKTOP-646PG42:/mnt/f/workspace/quickstart/electron-quick-start$ npm -V
: not foundram Files/nodejs/npm: 3: /mnt/c/Program Files/nodejs/npm: 
: not foundram Files/nodejs/npm: 5: /mnt/c/Program Files/nodejs/npm: 
/mnt/c/Program Files/nodejs/npm: 6: /mnt/c/Program Files/nodejs/npm: Syntax error: word unexpected (expecting "in")

 

 

02. 과정

 

깔았었는데 까먹었었나.. 싶으면서도 내용을  보니 경로가 조금 이상하다?

"Program Files"가 왜보이지? which로 실행되는 경로를 보니 실제로 "/mnt/c/Program Files/nodejs//npm"

white@DESKTOP-646PG42:/mnt/f/workspace/quickstart/electron-quick-start$ which npm
/mnt/c/Program Files/nodejs//npm

 

두가지의 궁금한점이 생겼다.

1) 어떻게 별도 설정하지도 않았는데, 머신밖의 npm 경로를 참조할 수 있을까?

2) 같은경로의 Windows의 npm과 WSL의 npm을 같이 사용할 수 있는가?

 

1번항목은 환경변수였다. WSL에서 자동으로 바깥환경(윈도우)의 환경변수 값을 가져오면서, 

바깥환경에서 nodejs 설치중 추가된 PATH값이 그대로 사용하게 된 것이다. 

이 케이스는 윈도의 환경변수 PATH를 참조한다해도(빨간), WSL내에서 기본적으로 설정한 PATH 항목(노란)이 우선순위가 높기에, 그냥 일반적인 npm 설치를 하면 될 일이다.

 

2번항목은 불가하다. 궁금했던 이유는, (보통 npm을 사용하는 이유 중 하나인) package.json만 가지고 여러플랫폼에서 사용하는 모듈을 그대로 이식할 수 있었는데, 내 생각의한계가 좁아서 '그 이상'은 생각하지못하고 그 코어또한 그렇게 작동되어 왔었나 싶어서였다.

일단 해당 경로에 확장자가 없는 npm이 존재했기에, 무작정 돌입을 해보았다. 직접 실행하든 타쉘로 실행하든, 권한을 줘보든 상기의 Syntax Error는 계속 발생했다. (=안된다)

두번째로 생각을 조금더해보니, npm은 포터블형태로 자식폴더/파일의 상대참조하는 식으로 실행되지 않는다. 프로젝트내의 node_modules는 주입식이지만, 로컬의 npm은 로컬환경에 종속적이며, 글로벌 설치는 프로젝트폴더밖 별도의 node_modules를 다른경로에 저장하고 있다. 대충 설정값을 비교해보면, 캐싱폴더/agent환경/쉘환경 정도였다.

 

 

 

03. 결론 및 해결

원인

(1) WSL Ubuntu가 윈도우의 환경변수를 그대로 참조하고

(2) 실제로 윈도우용 npm을 Bash로 실행하게 되면서 

발생한 에러이다.

 

해결방법

두단계로 진행한다.

 

(1) npm을 패키지관리툴을 사용하여 설치

  • $ apt으로 설치, npm으로 버전업그레이드한다.
  • PATH 우선순위를 이용하면서, 가능한 PATH를 건들지 않기 위함이다.
    수동설치한다면 과정1의 내용을 참조하여, 직접 /usr내에 밀어넣거나, PATH에 별도경로를 추가해준다.

(2) $PATH와 관련된 항목으로 쉘을 재실행한다.

  • environment 재실행

 

$ npm -v
: not foundram Files/nodejs/npm: 3: /mnt/c/Program Files/nodejs/npm:
: not foundram Files/nodejs/npm: 5: /mnt/c/Program Files/nodejs/npm:
/mnt/c/Program Files/nodejs/npm: 6: /mnt/c/Program Files/nodejs/npm: Syntax error: word unexpected (expecting "in")

$ sudo apt install npm
## apt 서버로부터 npm 설치

$ npm install npm@latest -g
## apt로 설치 시 보통 구버전이 설치되므로, npm으로 npm을 업그레이드 해준다.

$ source /etc/environment
## 변경된 환경변수를 재적용

$ npm -v
6.14.1

 

not foundram Files/nodejs/npm:/mnt/c/Program Files/nodejs/npm: Syntax error: word unexpected (expecting "in")' 이슈