[Windows] Node.js 전역 npm 패키지 명령어 실행시 ExecutionPolicy 오류

들어가기 전에, ExecutionPolicy 보안 정책에 어긋난다고 해서 이것의 규제 장치를 풀어헤치는 것에 좀 반감이 들었다. npm을 통해 실행할 스크립트야 대부분 신뢰있는 스크립트겠지만, 어쨌건 방화벽 하나를 해제하는 기분이었다. 미래에 어떤 보안 위협이 내 컴퓨터에 올지 모르는 일이니까 걱정이 되었는데, 그냥 걱정하지 않기로 했다. 깊은 생각을 하지 말자.


copyfiles를 전역 패키지 설치하여 사용하려고 했으나 에러가 떠서 해결방법을 찾아다녔다. copyfiles 뿐만 아니라 pm2, vue 등 윈도우 상에서 글로벌하게 npm 패키지를 설치했을 때 문제가 발생한다. 아래는 그 해결책을 적어놓은 것이다.


처음에는 아예 전역 패키지 경로가 Path에 등록되어 있지 않을 수 있으므로, 환경 변수 설정을 해준다. 경로는 다음과 같다.

C:\Users\<username>\AppData\Roaming\npm

이제 전역 패키지를 설치하고 실행을 해보자.

PS ... > npm install -g copyfiles
...
PS ... > copyfiles
...
위치 줄:1 문자:1
+ copyfiles
+ ~~~~~~~~~
    + CategoryInfo          : 보안 오류: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

UnauthorizedAccess 에러가 발생한다.


다음 명령어로 현재 ExecutionPolicy가 어떤 상태인지 확인해보자.

PS ... > ExecutionPolicy
Restricted

Restricted는 제한된다는 뜻이다. 그럼 이 정책을 바꿀 차례가 되었다.


하지만 Set-ExecutionPolicy Unrestricted 명령어를 실행해도 마음처럼 되지 않는다. 에러가 한번 더 뜬다.

PS ... > Set-ExecutionPolicy Unrestricted
Set-ExecutionPolicy : Windows PowerShell에서 실행 정책을 업데이트했지만 좀 더 구체적인 범위에서 정의된 정책에 의해 설정이 재정의되었습니다. 재정의로 인해 셸은 현재 유효 실행 정책인 Restricted을(를) 유지합니다. 실행 정책 설 
정을 보려면 "Get-ExecutionPolicy -List"를 입력하십시오. 자세한 내용은 "Get-Help Set-ExecutionPolicy"를 참조하십시오.
위치 줄:1 문자:1
+ Set-ExecutionPolicy Unrestricted
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (:) [Set-ExecutionPolicy], SecurityException
    + FullyQualifiedErrorId : ExecutionPolicyOverride,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand

변경하려고 했으나 뭐 또 다른 설정 때문에 재정의되었다고 한다.


하라는 대로 Get-ExecutionPolicy -List를 실행시켜보자.

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser      Restricted
 LocalMachine    Unrestricted

Scope에서 CurrentUserRestricted인 걸 확인할 수 있다. Scope를 지정하여 바꾸면 해결될 것 같다.


구글링하여 Set-ExecutionPolicy -Scope CurrentUser Unrestricted 라는 명령어를 만들었다.

PS ... > Set-ExecutionPolicy -Scope CurrentUser Unrestricted

실행을 시키니 아무런 메시지도 뜨지 않는다. 제대로 되었다는 것일까?


ExecutionPolicy 명령어로 한번 더 확인해본다.

PS ... > ExecutionPolicy
Unrestricted

오! Unrestricted 가 뜨면서 성공적으로 해결되었다. 끝~

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다

Scroll to top