رهام رفیعی تهرانی
رهام رفیعی تهرانی
خواندن ۱ دقیقه·۲ سال پیش

یکسان سازی environment variables در لینوکس، Mac و ویندوز

به صورت پیش فرض، در اپلیکیشن انگولار وقتی بیلد گرفته میشه، خروجی در دایرکتوری 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 ساخته شد.

:)


angularcross platformpackage jsonانگولار
برنامه نویسی یک شغل نیست، یک هنره.
شاید از این پست‌ها خوشتان بیاید