node.js - چگونه یک مقدار بولی را در process.env پارامتر کنید
من یک اسکریپت Playwright دارم که نیاز دارد مقدار بولی برای گزینه headless داشته باشد. میخواهم این را به عنوان یک پارامتر در process.env ارسال کنم. اجرای pipeline نسخه headless را قبول میکند، اما وقتی کسی بخواهد آن را به صورت محلی اجرا کند، بهتر است در نسخه headed اجرا شود. بنابراین مناسب خواهد بود که آن را پارامتری کنیم.
import test, { Browser, chromium, expect, Page } from '@playwright/test'
async function authSetup() {
const browser: Browser = await chromium.launch({headless: process.env.headless})
const context = await browser.newContext()
const page: Page = await context.newPage()
این منجر به خطا میشود:
Error: browserType.launch: headless: expected boolean, got string
پاسخ شماره ۱
مقدارها در process.env همیشه رشته هستند، نه فقط زمانی که از خارج فرآیند میآیند (از محیط واقعی)، بلکه حتی اگر خودتان مقداری تنظیم کنید:
تخصیص یک ویژگی به process.env بهطور ضمنی مقدار را به رشته تبدیل میکند.
از آنجایی که مقدار همیشه یا undefined یا یک رشته خواهد بود (و نه یک بولی)، شما میتوانید یک بررسی صریح برای یک مقدار مشخص اضافه کنید (process.env.headless === 'true') یا میتوانید یک لیست از مقادیر «درست» یا «غلط» ایجاد کنید.
شما همچنین میتوانید از یک بسته مانند yn استفاده کنید که چنین فهرستی را قبلاً شامل شده است:
مقادیر غیر حساس به حروف به شرح زیر شناسایی میشوند:
'y', 'yes', 'true', true, '1', 1, 'n', 'no', 'false', false, '0', 0, 'on', 'off'
که شبیه این خواهد بود:
chromium.launch({headless: yn(process.env.headless, {default: false})})
این فقط در صورتی که مقدار "true"، "1" و غیره باشد، فرآیند را بدون سر اجرا میکند.
اگر هیچ مقداری تعریف نشده باشد (یا بهطور صریح به مقدار نادرست تنظیم شده باشد) بدون سر اجرا نخواهد شد.
پاسخ شماره ۲
فقط ارزش آن را مقایسه کن.
{ headless: process.env.headless === "true" }
