95 lines
3.0 KiB
JavaScript
95 lines
3.0 KiB
JavaScript
const fs = require("fs-extra");
|
|
const path = require("path");
|
|
const esbuild = require("esbuild");
|
|
const { execSync } = require("child_process");
|
|
|
|
const distDir = path.join(__dirname, "dist");
|
|
const origPackagePath = path.join(__dirname, "package.json");
|
|
|
|
async function build() {
|
|
console.log("🚀 빌드 프로세스를 시작합니다...");
|
|
|
|
// 1. 기존 dist 폴더 초기화
|
|
console.log("🧹 dist 폴더를 청소합니다...");
|
|
fs.emptyDirSync(distDir);
|
|
|
|
// 2. esbuild를 사용한 소스 코드 번들링
|
|
console.log("📦 esbuild로 소스 코드를 빌드하는 중...");
|
|
|
|
// 외부로 뺄 의존성 (런타임에 에셋/바이너리가 직접 필요한 것들)
|
|
const externalModules = [
|
|
"sequelize",
|
|
"mysql2",
|
|
"pdfkit",
|
|
"swagger-ui-express",
|
|
"swagger-jsdoc"
|
|
];
|
|
|
|
try {
|
|
await esbuild.build({
|
|
entryPoints: [path.join(__dirname, "server.js")],
|
|
bundle: true,
|
|
platform: "node",
|
|
target: "node20",
|
|
format: "cjs",
|
|
outfile: path.join(distDir, "server.js"),
|
|
external: externalModules,
|
|
minify: false, // 디버깅 편의를 위해 난독화/압축은 적용 안 함
|
|
sourcemap: false,
|
|
});
|
|
console.log("✅ 소스 코드 빌드 완료 (dist/server.js)");
|
|
} catch (err) {
|
|
console.error("❌ 빌드 중 오류 발생:", err);
|
|
process.exit(1);
|
|
}
|
|
|
|
// 3. 배포용 package.json 작성
|
|
console.log("📝 배포용 package.json을 생성합니다...");
|
|
const origPackage = fs.readJsonSync(origPackagePath);
|
|
|
|
const distPackage = {
|
|
name: origPackage.name + "-dist",
|
|
version: origPackage.version,
|
|
main: "server.js",
|
|
scripts: {
|
|
start: "node server.js"
|
|
},
|
|
dependencies: {}
|
|
};
|
|
|
|
// 외부 의존성들의 버전을 원본 package.json에서 가져와 등록
|
|
externalModules.forEach(mod => {
|
|
if (origPackage.dependencies[mod]) {
|
|
distPackage.dependencies[mod] = origPackage.dependencies[mod];
|
|
} else {
|
|
// 혹시 원본에 명시되지 않은 경우 와일드카드로 지정
|
|
distPackage.dependencies[mod] = "*";
|
|
}
|
|
});
|
|
|
|
fs.writeJsonSync(path.join(distDir, "package.json"), distPackage, { spaces: 2 });
|
|
console.log("✅ 배포용 package.json 생성 완료");
|
|
|
|
// 4. dist 내에서 배포용 node_modules 설치
|
|
console.log("🚚 dist 내부에서 배포용 의존성 패키지를 설치합니다 (npm install --omit=dev)...");
|
|
|
|
// OS별 npm 명령어 분기 (윈도우에서는 npm.cmd 사용)
|
|
const npmCmd = process.platform === "win32" ? "npm.cmd" : "npm";
|
|
|
|
try {
|
|
execSync(`${npmCmd} install --omit=dev`, {
|
|
cwd: distDir,
|
|
stdio: "inherit" // 설치 로그를 현재 프로세스 콘솔에 연동
|
|
});
|
|
console.log("✅ 배포용 의존성 패키지 설치 완료 (dist/node_modules)");
|
|
} catch (err) {
|
|
console.error("❌ 의존성 설치 중 오류 발생:", err);
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log("\n🎉 모든 빌드 프로세스가 성공적으로 끝났습니다!");
|
|
console.log("👉 'dist' 폴더를 파일질라로 업로드하여 사용하시면 됩니다.");
|
|
}
|
|
|
|
build();
|