به صورت پیش فرض، در اپلیکیشن انگولار وقتی بیلد گرفته میشه، خروجی در دایرکتوری dist و به نام پروژه گرفته میشه. مثلا اگر اسم پروژه app باشه، خروجی نهایی در مسیر dist/app گرفته میشه. دیروز خواستم تجربه بهتری از بیلد گرفتن در محیط های مختلف رو تجربه کنم. با توجه به اینکه هنوز CICD به محیط اضافه نشده و سه تا محیط مختلف dev، stage و prod داریم، سعی کردم به خروجی نهایی اسم محیط (مثلا dev یا stage یا prod ) و ورژن اپلیکیشن (مثلا 0.3.8 یا 0.3.9 ) رو هم اضافه کنم تا راحت تر از نسخه های جدیدتر خروجی بگیرم.
بعد از دو ساعت جستجو و تست راهکارهای موجود، به این نتیجه رسیدم که داخل فایل package.json، دستور زیر رو اضافه کنم:
scripts: {
...
"dev": ng build --configuration dev --output-path dist/app-dev-$npm_package_version
}
در سیستم خانه که سیستم عامل لینوکس داره مشکلی نبود و بیلد گرفتم. اما امروز که اومدم از روی سیستم ویندوزی شرکت بیلد بگیرم، متوجه شدم متغیر نسخه نرم افزار در اسکریپت شناسایی نمیشه.
اولش دستور زیر رو اضافه کردم:
scripts: {
...
"win-dev": ng build --configuration dev --output-path dist/app-dev-%npm-package-version%
}
با این کار یک اسکریپت مخصوص بیلد گرفتن از ویندوز اضافه شد و کار کرد. ولی خیلی به دلم ننشست که برای یک کار ، دو تا اسکریپت جدا بنویسم. با یه سرچ کوتاه، به راه حل cross-var رسیدم. این افزونه برای همین کار نوشته شده که دستور رو بدون در نظر گرفتن محیط لینوکس/مک اجرا بشه.
اول cross-var رو نصب کردم:
npm i cross-var
بعد دستور اولی رو تغییر دادم:
scripts: {
...
"dev": cross-var ng build --configuration dev --output-path dist/app-dev-$npm_package_version
}
و اپلیکیشن در پوشه dist/app-dev-0.3.9 ساخته شد.
:)