دوازده پکیجی که دیگه لازم نیست نصب کنی
خلاصهٔ کاملتر
یه package.json چندسال پیش رو که باز کنی، همون اسمهای همیشگی توشن: axios، nodemon، dotenv، jest، chalk، uuid، rimraf. نویسنده میگه نود الان برای هرکدوم از اینها یه معادل داخلی داره و دوازدهتاشو مرور کرده: هرکدوم جای چه پکیجی رو میگیره، کوتاهترین مثالی که واقعاً اجرا میشه، چقدر پایداره، و اون یه کاری که پکیج قدیمی بلده ولی نسخه داخلی هنوز نه.
دو تا از جاافتادهترینهاش تست و درخواست HTTP هستن. از نود ۲۰ به بعد node:test و node:assert خود نود هستن و اولین تست هیچ کانفیگی نمیخواد:
import { test } from 'node:test'
import assert from 'node:assert/strict'
test('adds two numbers', () => {
assert.equal(2 + 2, 4)
})با node --test اجراش میکنی و خودش فایلهایی مثل math.test.js رو پیدا میکنه. جای axios و node-fetch هم fetch() سراسریه که از نود ۲۱ پایدار شده و پشتش undici نشسته، یعنی همون کلاینت HTTP که مخصوص نود نوشته شده:
const res = await fetch('https://api.github.com/repos/nodejs/node')
const repo = await res.json()
console.log(repo.full_name, res.status)ولی یه تفاوت مهم داره: fetch() روی ۴۰۴ و ۵۰۰ خطا نمیده. axios هر جواب غیر ۲xx رو throw میکرد و کلی کد بیسروصدا به همین تکیه کرده، پس اینجا باید خودت هر بار res.ok رو چک کنی.
بقیهشون هم همین شکلیان: node --watch جای nodemon، فلگ --env-file و process.loadEnvFile() جای dotenv، util.parseArgs() جای yargs و commander، util.styleText() جای chalk، fs.glob() جای glob، کلاس سراسری WebSocket جای سمت کلاینتِ ws، crypto.randomUUID() جای uuid، و fs.rm() و fs.mkdir() با آپشن recursive جای rimraf و mkdirp. نود از ۲۴.۱۲.۰ تایپهای تایپاسکریپت رو هم خودش پاک میکنه و فایل .ts رو مستقیم اجرا میکنه، پس ts-node و tsx هم لازم نیستن.
نویسنده تأکید میکنه هیچکدوم صددرصد جای پکیج قبلی رو نمیگیرن. node:sqlite تو نود ۲۴ هنوز release candidate هست و معادلی برای db.transaction() نداره. --watch-path فقط روی مک و ویندوزه، پس روی لینوکس فقط ماژولهای importشده watch میشن. --env-file متغیر رو بسط نمیده، یعنی اگه تو فایل به یه متغیر دیگه ارجاع بدی عیناً همون رشته با علامت دلار میمونه. parseArgs نه --help میسازه نه سابکامند داره. WebSocket هم فقط کلاینته و سمت سرور هنوز ws میخواد.
نکات کلیدی:
- node:test و node:assert از نود ۲۰.۰.۰ پایدارن، ولی code coverage و mock کردن کل ماژول هنوز پشت فلگ experimentalان.
- fetch() از نود ۲۱.۰.۰ پایداره و روی وضعیت خطا throw نمیکنه، پس res.ok رو خودت چک کن.
- node:sqlite تو نود ۲۴.۱۵.۰ به سطح ۱.۲ یعنی release candidate رسیده، ولی تو نود ۲۲ هنوز ۱.۱ هست.
- --env-file و process.loadEnvFile() از ۲۴.۱۰.۰ و ۲۲.۲۱.۰ پایدار شدن و برخلاف dotenv مقدار NODE_OPTIONS رو هم اعمال میکنن.
- fs.glob() از نود ۲۴.۰.۰ پایداره و نسخه promise به جای آرایه یه async iterator برمیگردونه.
- پاک کردن تایپهای تایپاسکریپت از ۲۴.۱۲.۰ پایدار شده، ولی با enum و namespace و فایل .tsx کار نمیکنه و نود ۲۶ فلگ --experimental-transform-types رو حذف کرده.




