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에서 보통 동작하지 않는 패키지의 예:
sharpsqlite3bcryptcanvaspuppeteerfs,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 폴더 바깥의 패키지를 설치할 수 있기 때문입니다.