درک هشدار استهلاک PunyCode در Node.js

اگر اخیراً این هشدار را در برنامه Node.js خود دیده اید ، تنها نیستید. در این پست ، ما به معنای این هشدار دهنده ، چرا این اتفاق می افتد و چگونه می توان آن را اصلاح کرد.
(node:xxxx) [DEP0040] DeprecationWarning: `punycode` module is deprecated. Please use a third-party alternative instead.
… چیست punycode
؟
در punycode
ماژول الگوریتم punycode را که تبدیل می کند ، پیاده سازی می کند کاراکترهای یونیکد (مانند ایموجی ها یا شخصیت هایی با لهجه) رشته های ایمن ASCII که می تواند در نام دامنه استفاده شود.
این به ویژه برای نام دامنه بین المللی (IDNS) مانند:
mañana.com → xn--maana-pta.com
✨ چگونه کار می کند (ساده شده)
الگوریتم PunyCode:
- با تمام شخصیت های اساسی ASCII شروع می شود.
- شخصیت های غیر ASCII (مانند ñ یا ü) را با استفاده از یک طرح فشرده سازی Base-36 رمزگذاری می کند.
- اضافه می کند
xn--
پیشوند برای نشان دادن این یک دامنه رمزگذاری شده با PunyCode است.
اینقدر mañana.com
می شود xn--maana-pta.com
، یک نام دامنه معتبر DNS.
🛑 چرا بود punycode
در node.js مستهلک می شود؟
node.js هسته را حذف کرد punycode
ماژول از API پیش فرض شروع می شود v7.0.0، به چند دلیل:
- ✅ بندرت مورد نیاز است در برنامه های مدرن
- ✅ API های وب مدرن به طور خودکار PunyCode را کنترل می کنند (اطلاعات بیشتر در مورد زیر).
- ✅ هسته گره در حال لاغر شدن بود برای تشویق مدولار.
- ✅ یک نسخه نگهداری شده در صورت لزوم هنوز در NPM وجود دارد.
✅ جایگزین چیست؟
1 از بسته NPM استفاده کنید (هنوز هم نگهداری شده است)
اگر واقعاً نیاز به کار مستقیم با PunyCode دارید:
npm install punycode
const punycode = require('punycode/');
const unicode = 'mañana.com';
const ascii = punycode.toASCII(unicode);
console.log(ascii); // 'xn--maana-pta.com'
🔍 توجه: استفاده کنید
require('punycode/')
برای جلوگیری از رفتار غیر منتظره.
2 از Whatwg استفاده کنید URL
API (برای بیشتر موارد استفاده ترجیح داده می شود)
نسخه های مدرن node.js (v10+) پشتیبانی می کنند API URL Whatwg، که به طور خودکار رمزگذاری PunyCode را کنترل می کند:
const url = new URL('https://mañana.com');
console.log(url.hostname); // 'xn--maana-pta.com'
این مرورگر سازگار است ، مبتنی بر استانداردها و نیازی به بسته های اضافی ندارد.
🧪 مثال: جایگزینی punycode
با URL
کد قدیمی با استفاده از punycode
:
const punycode = require('punycode/');
const domain = 'mañana.com';
console.log(punycode.toASCII(domain)); // 'xn--maana-pta.com'
جایگزین مدرن:
const domain = new URL('http://mañana.com').hostname;
console.log(domain); // 'xn--maana-pta.com'
🧼 بسته بندی
در punycode
هشدار استهلاک بی ضرر است – اما این یک سیگنال برای پایه کد خود را به روز کنید برای سازگاری Node.js مدرن. در بیشتر موارد ، شما نیازی به نصب چیزی ندارید. فقط به بومی تغییر دهید URL
API ، و شما خوب هستید که بروید.
به ارتقاء کد میراث یا منطق URL مهاجرت نیاز دارید؟ احساس راحتی کنید!