fix: vendor Prisma into release for Docker

This commit is contained in:
mahmood
2026-09-10 12:53:23 +03:30
parent 9e8d4a017d
commit f0f82d20ec
59 changed files with 58842 additions and 12 deletions
+7 -11
View File
@@ -1,6 +1,6 @@
/**
* باندل تک‌فایل برای Docker (release/app.js) بعد از nest build.
* Prisma client + engines را کنار app.js کپی می‌کند تا روی Alpine بدون npm کار کند.
* Prisma client + engines را در release/vendor می‌گذارد (نه node_modules تا gitignore نخورد).
*/
const esbuild = require('esbuild');
const {
@@ -15,6 +15,7 @@ const path = require('path');
const root = path.join(__dirname, '..');
const config = require(path.join(root, 'esbuild.release.config.cjs'));
const releaseDir = path.join(root, 'release');
const vendorDir = path.join(releaseDir, 'vendor');
function resolvePkg(name) {
return path.dirname(require.resolve(`${name}/package.json`, { paths: [root] }));
@@ -22,30 +23,25 @@ function resolvePkg(name) {
function copyPrismaIntoRelease() {
const prismaClientSrc = resolvePkg('@prisma/client');
const prismaClientDest = path.join(releaseDir, 'node_modules', '@prisma', 'client');
const prismaClientDest = path.join(vendorDir, '@prisma', 'client');
mkdirSync(path.dirname(prismaClientDest), { recursive: true });
cpSync(prismaClientSrc, prismaClientDest, { recursive: true });
// .prisma/client lives next to @prisma/client in pnpm layout (or under node_modules/.prisma)
const candidates = [
path.join(root, 'node_modules', '.prisma', 'client'),
path.join(prismaClientSrc, '..', '.prisma', 'client'),
path.join(path.dirname(prismaClientSrc), '.prisma', 'client'),
path.join(prismaClientSrc, '..', '..', '.prisma', 'client'),
];
let prismaEngineSrc = candidates.find((p) => existsSync(p));
if (!prismaEngineSrc) {
// pnpm: @prisma/client -> .../node_modules/@prisma/client ; .prisma is sibling under node_modules
const nm = path.join(prismaClientSrc, '..', '..', '.prisma', 'client');
if (existsSync(nm)) prismaEngineSrc = nm;
}
const prismaEngineSrc = candidates.find((p) => existsSync(p));
if (!prismaEngineSrc) {
throw new Error(
'Prisma generated client (.prisma/client) یافت نشد. ابتدا: pnpm --filter api exec prisma generate',
);
}
const prismaEngineDest = path.join(releaseDir, 'node_modules', '.prisma', 'client');
const prismaEngineDest = path.join(vendorDir, '.prisma', 'client');
mkdirSync(path.dirname(prismaEngineDest), { recursive: true });
cpSync(realpathSync(prismaEngineSrc), prismaEngineDest, { recursive: true });
}
@@ -69,7 +65,7 @@ async function main() {
copyPrismaIntoRelease();
console.log('نوشت:', config.outfile);
console.log('Prisma client در release/node_modules کپی شد.');
console.log('Prisma client در release/vendor کپی شد.');
}
main().catch((err) => {