본문으로 건너뛰기

npm install 사용하기

dayjs나 lodash 같은 npm 패키지를 Proxyman의 Application Support 폴더에 설치하고, Proxyman Scripting에서 require()로 사용하세요.

Proxyman Scripting에서 npm 패키지 사용하기​

Proxyman Scripting은 Proxyman의 Application Support 폴더에 설치된 호환 npm 패키지에 대한 require()를 지원합니다. 이를 통해 스크립트에서 널리 쓰이는 JavaScript 유틸리티를 재사용할 수 있으므로, 흔한 로직을 직접 다시 작성할 필요가 없습니다.

이 기능은 Proxyman이 기본 제공 라이브러리와 사용자 애드온에 이미 사용하는 것과 같은 require() 키워드를 유지합니다. 기존에 사용하던 @libs, @addons, @users 가져오기와 JSON 파일, 텍스트 파일, 로컬 파일 가져오기도 계속 동작합니다.

패키지 설치하기​

Terminal을 열고 Proxyman의 Application Support 폴더에 패키지를 설치합니다:

  • dayjs를 설치합니다
$ cd "$HOME/Library/Application Support/com.proxyman.NSProxy"
$ npm install --prefix . dayjs --ignore-scripts --no-audit --no-fund

설치가 끝나면 다음 경로에 패키지가 생성됩니다:

~/Library/Application Support/com.proxyman.NSProxy/node_modules

스크립트에서 패키지 사용하기​

require()에 패키지 이름을 전달합니다:

const dayjs = require("dayjs");

async function onRequest(context, url, request) {
const formattedDate = dayjs("2026-05-05T13:00:00Z").format("YYYY-MM-DD");
request.headers["X-Proxyman-Dayjs"] = formattedDate;
return request;
}

예제​

dayjs로 날짜 포맷하기​

설치:

cd "$HOME/Library/Application Support/com.proxyman.NSProxy" && npm install --prefix . dayjs --ignore-scripts --no-audit --no-fund

스크립트:

const dayjs = require("dayjs");

async function onRequest(context, url, request) {
request.headers["X-Request-Date"] = dayjs().format("YYYY-MM-DD");
return request;
}

lodash로 텍스트 정규화하기​

설치:

cd "$HOME/Library/Application Support/com.proxyman.NSProxy" && npm install --prefix . lodash --ignore-scripts --no-audit --no-fund

스크립트:

const _ = require("lodash");

async function onRequest(context, url, request) {
const label = _.kebabCase("Hello Proxyman Scripts");
request.headers["X-Proxyman-Label"] = label;
return request;
}

validator로 입력값 검증하기​

설치:

cd "$HOME/Library/Application Support/com.proxyman.NSProxy" && npm install --prefix . validator --ignore-scripts --no-audit --no-fund

스크립트:

const validator = require("validator");

async function onRequest(context, url, request) {
const email = new URL(url).searchParams.get("email") || "";
request.headers["X-Email-Is-Valid"] = validator.isEmail(email) ? "true" : "false";
return request;
}

slugify로 슬러그 생성하기​

설치:

cd "$HOME/Library/Application Support/com.proxyman.NSProxy" && npm install --prefix . slugify --ignore-scripts --no-audit --no-fund

스크립트:

const slugify = require("slugify");

async function onRequest(context, url, request) {
const title = new URL(url).searchParams.get("title") || "Hello Proxyman";
request.headers["X-Proxyman-Slug"] = slugify(title, { lower: true });
return request;
}

js-base64로 데이터 인코딩하기​

설치:

cd "$HOME/Library/Application Support/com.proxyman.NSProxy" && npm install --prefix . js-base64 --ignore-scripts --no-audit --no-fund

스크립트:

const { Base64 } = require("js-base64");

async function onResponse(context, url, request, response) {
response.headers["X-Proxyman-Encoded"] = Base64.encode("Proxyman");
return response;
}

he로 HTML 엔티티 디코딩하기​

설치:

cd "$HOME/Library/Application Support/com.proxyman.NSProxy" && npm install --prefix . he --ignore-scripts --no-audit --no-fund

스크립트:

const he = require("he");

async function onResponse(context, url, request, response) {
response.headers["X-Decoded-Title"] = he.decode("Proxyman & Scripting");
return response;
}

호환성​

Proxyman은 Node.js가 아닌 JavaScriptCore로 스크립트를 실행합니다. npm 패키지는 순수 JavaScript이고 CommonJS와 호환될 때 가장 잘 동작합니다.

지원하는 항목:

  • require("package-name")으로 불러오는 CommonJS 패키지
  • main이나 단순한 exports처럼 package.json에 정의된 패키지 진입점
  • 설치된 패키지 내부에서 사용하는 상대 경로 가져오기(예: require("./helper"))
  • 패키지가 require하는 JSON 파일

지원하지 않는 항목:

  • fs, path, crypto, http, child_process 같은 Node.js 기본 모듈
  • 네이티브 .node 애드온
  • 전체 Node.js 런타임이 필요한 패키지
  • CommonJS require()로 불러올 수 없는 ESM 전용 패키지

Node.js 네이티브 라이브러리​

Proxyman Scripting은 Node.js 런타임 안에서 실행되지 않습니다. Node/npm은 패키지를 설치하는 도구로만 사용하며, 이후 호환되는 JavaScript 파일을 JavaScriptCore로 불러옵니다.

이 때문에 Node.js 네이티브 라이브러리는 지원되지 않습니다:

  • require("fs"), require("path"), require("crypto") 등 Node.js 기본 모듈은 차단됩니다.
  • require("node:fs")와 require("fs/promises") 같은 기본 모듈의 하위 경로도 차단됩니다.
  • .node 파일로 컴파일된 네이티브 C/C++ 애드온은 차단됩니다.
  • process.dlopen, 파일 시스템 API, 네트워크 소켓, 자식 프로세스처럼 Node.js 전용 API를 호출하는 패키지는 동작하지 않습니다.

Proxyman Scripting에서 보통 동작하지 않는 패키지의 예:

  • sharp
  • sqlite3
  • bcrypt
  • canvas
  • puppeteer
  • fs, path, crypto, http, https, net, child_process를 require하는 패키지

대신 순수 JavaScript 패키지나 CommonJS 브라우저 호환 빌드를 제공하는 패키지를 사용하세요.

문제 해결​

require("dayjs") 또는 다른 패키지가 undefined를 반환하면 패키지가 올바른 폴더에 설치되어 있는지 확인하세요:

ls "$HOME/Library/Application Support/com.proxyman.NSProxy/node_modules"

node_modules가 없다면 --prefix . 옵션을 사용해 다시 설치하세요:

cd "$HOME/Library/Application Support/com.proxyman.NSProxy" && npm install --prefix . dayjs --ignore-scripts --no-audit --no-fund

--prefix . 옵션은 중요합니다. 이 옵션이 없으면 npm이 상위 폴더로 올라가 상위 package.json을 찾고, 그 위치에 Proxyman 폴더 바깥의 패키지를 설치할 수 있기 때문입니다.