troubleshooting2025-05-07·7·85/348

npm exec 스크립트 실행 권한 에러 해결

npm exec 명령어를 사용할 때 발생하는 실행 권한 에러와 그 해결 방법을 다룹니다.

Introduction

npm exec를 사용하여 스크립트를 실행할 때 권한 에러가 발생하는 경우가 있습니다. 특히 Windows와 Unix 환경 간의 차이로 인해 문제가 발생할 수 있습니다.

Environment

npm --version
# 10.2.4

node --version
# v20.11.0

# 실행 환경
OS: Windows 11
Shell: PowerShell

Problem

npm exec로 스크립트를 실행할 때 다음과 같은 에러가 발생했습니다:

$ npm exec ./scripts/deploy.sh
# Windows PowerShell 에러
./scripts/deploy.sh : File cannot be loaded because running scripts is disabled on this system.

# 또는 Unix/Linux 에러
bash: ./scripts/deploy.sh: Permission denied

Solution

1. Windows에서 Unix 스크립트 실행

# 방법 1: bash로 실행
$ bash ./scripts/deploy.sh

# 방법 2: npm script에서 실행
# package.json
{
    "scripts": {
        "deploy": "bash ./scripts/deploy.sh"
    }
}

# 방법 3: PowerShell 실행 정책 변경
$ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

2. Unix/Linux에서 권한 설정

# 실행 권한 부여
$ chmod +x ./scripts/deploy.sh

# 스크립트 실행
$ ./scripts/deploy.sh

# 또는 npm script 사용
$ npm run deploy

3. npm exec 옵션 설정

# --yes 옵션으로 프롬프트 없이 실행
$ npx --yes create-react-app my-app

# 특정 패키지 버전 지정
$ npx typescript@5.3.3 tsc --version

# 로컬 패키지 실행
$ npx --no-install eslint .

4. 크로스 플랫폼 스크립트

{
    "scripts": {
        "build": "cross-env NODE_ENV=production webpack --config webpack.config.js",
        "start": "cross-env NODE_ENV=development webpack serve",
        "lint": "cross-env NODE_ENV=development eslint src/",
        "test": "cross-env NODE_ENV=test jest --coverage"
    },
    "devDependencies": {
        "cross-env": "^7.0.3"
    }
}

5. package.json bin 설정

{
    "name": "my-cli",
    "bin": {
        "my-cli": "./bin/cli.js"
    }
}
#!/usr/bin/env node
// bin/cli.js
const { program } = require('commander');

program
    .version('1.0.0')
    .command('deploy')
    .description('Deploy the application')
    .action(() => {
        console.log('Deploying...');
    });

program.parse(process.argv);

6. Windows 특정 문제 해결

# npm global bin 경로 확인
$ npm bin -g

# Windows에서 symbolic link 문제 해결
$ npm config set link true

# 또는 Git Bash 사용
$ bash -c "npm exec ./scripts/deploy.sh"

Lessons Learned

  1. 크로스 플랫폼 고려: Windows와 Unix 환경을 모두 지원하는 스크립트를 작성하세요
  2. cross-env 활용: 환경 변수 설정 시 cross-env를 사용하세요
  3. 실행 권한 확인: Unix/Linux에서는 스크립트 실행 권한을 확인하세요
  4. npm script 활용: 직접 실행보다 npm script를 통해 실행하세요
  5. PowerShell 정책: Windows에서는 실행 정책을 적절히 설정하세요

This blog does not accept any external sponsorships, affiliate marketing, or ad revenue.