نحوه استقرار توابع Google Cloud با فضاهای کاری PNPM

Summarize this content to 400 words in Persian Lang
آیا برای استقرار پروژه monorepo خود تلاش می کنید زیرا Cloud Build نمی داند چه جهنمی دارد؟ workspace:* یعنی؟شما در جای مناسب هستید! در این وبلاگ به شما نشان خواهم داد که چگونه آقای گوگل را فریب دهید تا پروژه PNPM monorepo خود را اجرا کند.
TL; DR
فقط همه چیز را بسته بندی کنید و ارسال کنید dist پوشه به توابع Cloud با یک فایل package.json خالی. تا-دا! 🎩✨
اینطوری انجامش میدی
ساده ایجاد کنید deploy.sh اسکریپت داخل بسته ای که حاوی تابع Cloud است که می خواهید اجرا کنید.
#!/bin/bash
# Install dependencies
pnpm install
# Build the project
npx esbuild \
./src/index.ts \
–bundle \
–platform=node \
–target=node20 \
–outfile=./dist/index.js \
–external:@google-cloud/functions-framework
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
در این فایل ما به سادگی وابستگی ها را با PNPM نصب می کنیم و کد منبع را با esbuild بسته می کنیم.این –external:@google-cloud/functions-framework مورد نیاز است زیرا توابع-چارچوب به دلایلی نباید همراه باشد.اگر وابستگیهای دیگری دارید که نمیتوان آنها را باندل کرد، برای مثال ماژولی که از پیوندهای بومی استفاده میکند، باید دیگری را اضافه کنید. –external پرچم برای آن ماژول.
در حال حاضر، در حال اجرا deploy.sh اسکریپت یک را ایجاد خواهد کرد dist پوشه با کد همراهتنها چیزی که ما در حال حاضر از دست می دهیم یک package.json است، زیرا توابع ابری از Cloud Build عبور می کنند، که مشکلات اعتماد دارد و می خواهد همه چیز را به تنهایی بسازد.بنابراین ما قصد داریم آن را با یک فایل خالی package.json فریب دهیم.این کد را درست بعد از esbuild دستور:
jq -n \
–arg name “@monorepo/functions” \
–arg version “1.0.0” \
–arg main “index.js” \
–arg start “node index.js” \
–arg build “echo \”No build step\”” \
–arg ff_version “^3.3.0” \
‘{
name: $name,
version: $version,
main: $main,
scripts: {
start: $start,
build: $build
},
dependencies: {
“@google-cloud/functions-framework”: $ff_version
}
}’ > ./dist/package.json
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
استفاده می کنیم jq برای خوانایی بیشتر کد، اما می توانید از آن نیز استفاده کنید echo برای نوشتن مستقیم JSON.حالا ما فقط نیاز به استقرار dist پوشه به Cloud Functions.این خط آخر را به deploy.sh اسکریپت:
gcloud functions deploy myFunction \
–runtime=nodejs20 \
–trigger-http \
–source=./dist
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
و بس! اکنون می توانید پروژه monorepo خود را در Cloud Functions با فضاهای کاری PNPM مستقر کنید.
آیا برای استقرار پروژه monorepo خود تلاش می کنید زیرا Cloud Build نمی داند چه جهنمی دارد؟ workspace:*
یعنی؟
شما در جای مناسب هستید! در این وبلاگ به شما نشان خواهم داد که چگونه آقای گوگل را فریب دهید تا پروژه PNPM monorepo خود را اجرا کند.
TL; DR
فقط همه چیز را بسته بندی کنید و ارسال کنید dist
پوشه به توابع Cloud با یک فایل package.json خالی. تا-دا! 🎩✨
اینطوری انجامش میدی
ساده ایجاد کنید deploy.sh
اسکریپت داخل بسته ای که حاوی تابع Cloud است که می خواهید اجرا کنید.
#!/bin/bash
# Install dependencies
pnpm install
# Build the project
npx esbuild \
./src/index.ts \
--bundle \
--platform=node \
--target=node20 \
--outfile=./dist/index.js \
--external:@google-cloud/functions-framework
در این فایل ما به سادگی وابستگی ها را با PNPM نصب می کنیم و کد منبع را با esbuild بسته می کنیم.
این --external:@google-cloud/functions-framework
مورد نیاز است زیرا توابع-چارچوب به دلایلی نباید همراه باشد.
اگر وابستگیهای دیگری دارید که نمیتوان آنها را باندل کرد، برای مثال ماژولی که از پیوندهای بومی استفاده میکند، باید دیگری را اضافه کنید. --external
پرچم برای آن ماژول.
در حال حاضر، در حال اجرا deploy.sh
اسکریپت یک را ایجاد خواهد کرد dist
پوشه با کد همراه
تنها چیزی که ما در حال حاضر از دست می دهیم یک package.json است، زیرا توابع ابری از Cloud Build عبور می کنند، که مشکلات اعتماد دارد و می خواهد همه چیز را به تنهایی بسازد.
بنابراین ما قصد داریم آن را با یک فایل خالی package.json فریب دهیم.
این کد را درست بعد از esbuild
دستور:
jq -n \
--arg name "@monorepo/functions" \
--arg version "1.0.0" \
--arg main "index.js" \
--arg start "node index.js" \
--arg build "echo \"No build step\"" \
--arg ff_version "^3.3.0" \
'{
name: $name,
version: $version,
main: $main,
scripts: {
start: $start,
build: $build
},
dependencies: {
"@google-cloud/functions-framework": $ff_version
}
}' > ./dist/package.json
استفاده می کنیم jq
برای خوانایی بیشتر کد، اما می توانید از آن نیز استفاده کنید echo
برای نوشتن مستقیم JSON.
حالا ما فقط نیاز به استقرار dist
پوشه به Cloud Functions.
این خط آخر را به deploy.sh
اسکریپت:
gcloud functions deploy myFunction \
--runtime=nodejs20 \
--trigger-http \
--source=./dist
و بس! اکنون می توانید پروژه monorepo خود را در Cloud Functions با فضاهای کاری PNPM مستقر کنید.