Friendship ended with Deno, now Node is my best friend
🇬🇧 English
After years using Deno as his primary runtime, the author finally returned to Node heavily for a Svelte Kit client project. He found the ECMAScript features are fully supported and the outdated `require()` calls are now modernized. While NPM installation via bash remains the official (and risky) method, he switched to PNPM and FNM to manage versions and avoid security risks.
A key frustration is Node's restriction on TypeScript packages within `node_modules`, a philosophical choice by the runtime maintainers. To bridge this, he used `Tsdown` for bundling, accepting the overhead of extra configuration files. Moving a static site generator from Deno to Node v26.10.0 required minimal changes, primarily swapping Deno APIs for `node:fs` and using Hono's adapter.
This migration surprisingly resulted in 15% faster build times. The author notes his codebase still idiomatically favors Deno, suggesting further performance gains are possible by leveraging native Node APIs. He is self-hosting Forgejo due to GitHub concerns and had to adjust PNPM trust policies to manage package provenance for his own modules.
🇸🇦 العربية
ترحيل Deno إلى Node: رؤى حول TypeScript والأداء
بعد سنوات من استخدام Deno كوقت تشغيل أساسي، عاد المؤلف أخيرًا إلى Node بشكل مكثف من أجل مشروع عميل Svelte Kit. وجد أن ميزات ECMAScript مدعومة تمامًا وأن المكالمات القديمة `require()` الآن مُحدثة. على الرغم من أن تثبيت NPM عبر bash يظل الطريقة الرسمية (والمحفوفة بالمخاطر)، فقد انتقل إلى PNPM و FNM لإدارة الإصدارات وتجنب المخاطر الأمنية. إحدى الإزعاجات الرئيسية هي قيود Node على حزم TypeScript داخل `node_modules`، وهو اختيار فلسفي من قبل مُديري وقت التشغيل. لسد هذه الفجوة، استخدم `Tsdown` لحزم البرامج، مقبولًا بزيادة ملفات الإعداد الإضافية. نقل مولد مواقع ثابتة من Deno إلى Node v26.10.0 استغرق أقل قليلاً من التغييرات، وبشكل رئيسي استبدال واجهات برمجة التطبيقات الخاصة بـ Deno بـ `node:fs` واستخدام محوّل Hono. وقد أدى هذا الترحيل بشكل مثير للاهتمام إلى زيادة سرعة البناء بنسبة 15%. يلاحظ المؤلف أن قاعدة الشيفرة الخاصة به لا تزال تميل إلى Deno بشكل لغوي، مما يشير إلى أن المزيد من تحسينات الأداء ممكنة من خلال الاستفادة من واجهات برمجة التطبيقات الأصلية الخاصة بـ Node. إنه يستضيف Forgejo بنفسه بسبب المخاوف حول GitHub واضطر إلى تعديل سياسات ثقة PNPM لإدارة أصل الحزم لوحداته الخاصة.
لماذا يقيد Node.js ملفات TypeScript داخل node_modules؟
القيود أكثر طابعًا فلسفيًا منه تقني. مديرو Node.js يرفضون التعامل مع ملفات TypeScript تحت node_modules لمنع تلوث النظام البيئي، بما أن TypeScript منتج Microsoft.
🇧🇩 বাংলা
Deno থেকে Node-এ মাইগ্রেশন: TypeScript এবং কর্মক্ষমতা অন্তর্দৃষ্টি
বছরগুলোর জন্য তার প্রাথমিক রানটাইম হিসেবে Deno ব্যবহার করার পরে, লেখক অবশেষে একটি Svelte Kit ক্লায়েন্ট প্রকল্পের জন্য Node-এ গভীরভাবে ফিরে এসেছেন। তিনি আবিষ্কৃত করেছেন যে ECMAScript বৈশিষ্ট্যগুলি পূরাবতঃ সমর্থিত এবং পুরনো `require()` কলগুলি এখন আধুনিকীকৃত হয়েছে। যদিও NPM ইনস্টলেশন বাশ এর মাধ্যমে আনুষ্ঠানিক (এবং ঝুঁকিপূর্ণ) পদ্ধতি থাকা সত্ত্বেও, তিনি সংস্করণ পরিচালনা ও নিরাপত্তা ঝুঁকি এড়াতে PNPM এবং FNM এর পরিবর্তে ব্যবহার করার সিদ্ধান্ত নিয়েছেন। একটি মূল অসন্তোষ হল Node-এর `node_modules`-এর মধ্যে TypeScript প্যাকেজের সীমাবদ্ধতা, যা রানটাইম রক্ষণাবেক্ষকদের একটি দার্শনিক পছন্দ। এটি মোটামুটি করতে, তিনি অতিরিক্ত কনফিগারেশন ফাইলের ওভারহেড স্বীকার করে `Tsdown` ব্যবহার করেছেন। একটি স্ট্যাটিক সাইট জেনারেটরকে Deno থেকে Node v26.10.0-এ স্থানান্তর করতে খুব কম পরিবর্তন প্রয়োজন ছিল, মূলত Deno API-কে `node:fs`-এর সাথে বিনিময় করে এবং Hono-এর অ্যাডাপ্টার ব্যবহার করে। আশ্চলভাবে এই মাইগ্রেশন বিল্ড সময়ে 15% দ্রুতি আনতে পারিয়েছে। লেখক উল্লেখ করেছেন যে তাঁর কোডবেস এখনও আইডিয়োম্যাটিকভাবে Deno-এর পক্ষে ঢেউ দেয়, যা বাস্তবে নেটিভ Node API ব্যবহার করে আরও কর্মক্ষমতা উন্নয়ন সম্ভব তা জানিয়ে দেয়। তিনি GitHub-এর উদ্বেগ থেকে বেরিয়ে নিজে থেকে Forgejo হোস্ট করছেন এবং নিজের মডিউলগুলির জন্য প্যাকেজের উৎপত্তি পরিচালনা করতে PNPM বিশ্বাস নীতিগুলিকে সমন্বয় করতে বাধ্য হয়েছেন।
কেন Node.js node_modules-এর মধ্যে TypeScript ফাইলগুলিকে সীমাবদ্ধ করে?
এই সীমাবদ্ধতাটি বেশি তাত্ত্বিক এবং কম প্রায়োগিক। Node.js রক্ষণাবেক্ষকরা node_modules-এর নিচে TypeScript ফাইলগুলিকে পরিচালনা করতে অস্বীকার করে, যাতে পরিবেশকে প্রদূষিত না করা যায়, কারণ TypeScript হল Microsoft-এর একটি পণ্য।
🇩🇪 Deutsch
Migration von Deno zu Node: TypeScript- und Leistungserkenntnisse
Nach Jahren der Verwendung von Deno als Haupt-Laufzeit kam der Autor schließlich für ein Svelte Kit-Kundenprojekt wieder zu Node. Er stellte fest, dass die ECMAScript-Features vollständig unterstützt werden und die veralteten `require()`-Aufrufe nun modernisiert sind. Obwohl die NPM-Installation über bash weiterhin die offizielle (und riskante) Methode ist, wechselte er zu PNPM und FNM, um Versionen zu verwalten und Sicherheissprobleme zu vermeiden.
Eine wichtige Frustration ist die Beschränkung von Node für TypeScript-Pakete innerhalb von `node_modules`, eine philosophische Entscheidung der Laufzeit-Maintainer. Um dies zu überbrücken, verwendete er `Tsdown` für das Bundling, wobei er die zusätzliche Konfigurationsdatei akzeptierte. Die Verschiebung eines statischen Site-Generators von Deno auf Node v26.10.0 erforderte minimale Änderungen, hauptsächlich den Austausch der Deno-APIs gegen `node:fs` und die Verwendung des Hono-Adapters.
Diese Migration führte überraschenderweise zu 15 % schnelleren Build-Zeiten. Der Autor bemerkt, dass seine Codebasis weiterhin idiomatisch Deno bevorzugt, was vorschlägt, dass weitere Leistungsverbesserungen möglich sind, indem native Node-APIs genutzt werden. Er selbst hostet Forgejo aufgrund von GitHub-Bedenken und musste die PNPM-Vertrauenspolitik anpassen, um die Herkunft der Pakete für seine eigenen Module zu verwalten.
Warum beschränkt Node.js TypeScript-Dateien innerhalb von node_modules?
Die Beschränkung ist philosophischer Natur und nicht technischer. Die Node.js-Maintainer lehnen es ab, TypeScript-Dateien unterhalb von node_modules zu verarbeiten, um eine Verschmutzung des Ökosystems zu vermeiden, da TypeScript ein Microsoft-Produkt ist.
🇪🇸 Español
Migración de Deno a Node: Perspectivas de TypeScript y Rendimiento
Después de años utilizando Deno como su runtime principal, el autor finalmente regresó a Node intensamente para un proyecto cliente de Svelte Kit. Descubrió que las características de ECMAScript son plenamente compatibles y las obsoletas llamadas `require()` ahora están modernizadas. Aunque la instalación de NPM mediante bash sigue siendo el método oficial (y riesgoso), él cambió a PNPM y FNM para gestionar versiones y evitar riesgos de seguridad.
Una frustración clave es la restricción de Node sobre paquetes de TypeScript dentro de `node_modules`, una elección filosófica por parte de los mantenedores del runtime. Para resolver esto, utilizó `Tsdown` para empaquetar, aceptando la sobrecarga de archivos de configuración adicionales. Mover un generador de sitios estáticos de Deno a Node v26.10.0 requirió cambios mínimos, principalmente reemplazando las APIs de Deno con `node:fs` y utilizando el adaptador de Hono.
Esta migración sorpresivamente resultó en un 15% más de velocidad en los tiempos de compilación. El autor señala que su base de código aún favorece idiomáticamente Deno, sugiriendo que se pueden obtener más mejoras de rendimiento aprovechando las APIs nativas de Node. Él autoaloja Forgejo debido a preocupaciones sobre GitHub y tuvo que ajustar las políticas de confianza de PNPM para gestionar la procedencia de los paquetes para sus propios módulos.
¿Por qué Node.js restringe los archivos TypeScript dentro de node_modules?
La restricción es filosófica más que técnica. Los mantenedores de Node.js se niegan a manejar archivos TypeScript bajo node_modules para prevenir la contaminación del ecosistema, ya que TypeScript es un producto de Microsoft.
🇫🇷 Français
Migration de Deno vers Node : Perspectives sur TypeScript et Performance
Après des années à utiliser Deno comme runtime principal, l’auteur est finalement revenu à Node de manière intensive pour un projet client Svelte Kit. Il a découvert que les fonctionnalités ECMAScript sont entièrement prises en charge et que les appels obsolètes `require()` sont désormais modernisés. Bien que l’installation de NPM via bash reste la méthode officielle (et risquée), il a basculé vers PNPM et FNM pour gérer les versions et éviter les risques de sécurité.
Une frustration majeure est la restriction de Node concernant les paquets TypeScript à l’intérieur de `node_modules`, un choix philosophique des mainteneurs du runtime. Pour pallier cela, il a utilisé `Tsdown` pour le bundling, acceptant la surcharge des fichiers de configuration supplémentaires. Déplacer un générateur de site statique de Deno vers Node v26.10.0 a nécessité des changements minimes, principalement le remplacement des API Deno par `node:fs` et l’utilisation de l’adaptateur de Hono.
Cette migration a surprenantement entraîné un gain de 15 % sur les temps de construction. L’auteur note que son code favorise toujours idiomatiquement Deno, suggérant que d’autres améliorations de performance sont possibles en exploitant les API natives de Node. Il auto-héberge Forgejo en raison de préoccupations concernant GitHub et a dû ajuster les politiques de confiance de PNPM pour gérer la provenance des paquets pour ses propres modules.
Pourquoi Node.js restreint-il les fichiers TypeScript à l’intérieur de node_modules ?
La restriction est philosophique plutôt que technique. Les mainteneurs de Node.js refusent de gérer les fichiers TypeScript sous node_modules pour éviter la pollution de l’écosystème, car TypeScript est un produit Microsoft.
🇮🇳 हिन्दी
Deno से Node में स्थानांतरण: TypeScript और प्रदर्शन अंतर्दृष्टि
कई वर्षों तक अपने प्राथमिक रनटाइम के रूप में Deno का उपयोग करने के बाद, लेखक ने अंततः एक Svelte Kit क्लाइंट प्रोजेक्ट के लिए Node के प्रययोगी रूप से वापस आए। उन्हें पता चला कि ECMAScript फीचर पूरी तरह से समर्थित हैं और पुराने `require()` कॉल अब आधुनिक हो चुके हैं। जबकि NPM इंस्टॉलेशन बैश के माध्यम से आधिकारिक (और जोखिम भरा) तरीका रहा है, उन्होंने संस्करण प्रबंधन और सुरक्षा जोखिमों से बचने के लिए PNPM और FNM का उपयोग करने का फैसला किया। एक प्रमुख असंतोष यह है कि Node `node_modules` के भीतर TypeScript पैकेज पर प्रतिबंध लगाता है, जो रनटाइम के रखरखावकर्ताओं द्वारा एक दार्शनिक विकल्प है। इसके बीच, उन्होंने बंडलिंग के लिए `Tsdown` का उपयोग किया, अतिरिक्त कॉन्फ़िगरेशन फ़ाइलों के ओवरहेड को स्वीकार करते हुए। Deno से Node v26.10.0 में एक स्थिर साइट जनरेटर को स्थानांतरित करने में कम से कम परिवर्तनों की आवश्यकता थी, मुख्य रूप से Deno API को `node:fs` से बदलने और Hono के एडैप्टर का उपयोग करने में। यह स्थानांतरण अच्छे तरह से 15% तेज़ निर्माण समय प्राप्त करने की ओर ले गया। लेखक नोट करते हैं कि उनका कोडबेस अभी भी प्रवाची रूप से Deno की ओर झुका है, जो सुझाव देता है कि मूल Node API का उपयोग करके अधिक प्रदर्शन सुधार संभव है। वह GitHub की चिंताओं के कारण स्वयं ही Forgejo को होस्ट कर रहे हैं और अपने स्वंय के मॉड्यूल्स के पैकेज की उत्पत्ति का प्रबंधन करने के लिए PNPM विश्वास नीतियों को समायोजित करना पड़ा।
क्यों Node.js node_modules के भीतर TypeScript फ़ाइलों को प्रतिबंधित करता है?
यह प्रतिबंध तकनीकी अधिक दार्शनिक है। Node.js के रखरखावकर्ता node_modules के अंतर्गत TypeScript फ़ाइलों को संभालने से इनकार करते हैं, ताकि ईकोसिस्टम के प्रदूषण को रोका जा सके, क्योंकि TypeScript एक Microsoft उत्पाद है।
🇮🇩 Bahasa Indonesia
Migrasi Deno ke Node: Wawasan TypeScript dan Kinerja
Setelah bertahun-tahun menggunakan Deno sebagai runtime utama, penulis akhirnya kembali ke Node secara intensif untuk proyek klien Svelte Kit. Ia menemukan bahwa fitur ECMAScript didukung sepenuhnya dan panggilan `require()` yang sudah usang kini telah dimodernisasi. Meskipun instalasi NPM melalui bash masih menjadi metode resmi (dan berisiko), ia beralih ke PNPM dan FNM untuk mengelola versi dan menghindari risiko keamanan.
Salah satu kekecewaan utama adalah pembatasan Node terhadap paket TypeScript di dalam `node_modules`, sebuah pilihan filosofis oleh pemelihara runtime. Untuk menjembatani hal ini, ia menggunakan `Tsdown` untuk bundling, dengan menerima overhead dari file konfigurasi tambahan. Memindahkan generator situs statis dari Deno ke Node v26.10.0 hanya membutuhkan perubahan minimal, terutama menukar API Deno dengan `node:fs` dan menggunakan adapter Hono.
Migrasi ini tiba-tiba menghasilkan 15% lebih cepat dalam waktu build. Penulis mencatat bahwa kode sumbernya masih secara idiomatik lebih memilih Deno, menyarankan bahwa lebih banyak peningkatan kinerja mungkin dengan memanfaatkan API asli Node. Ia meng-host Forgejo sendiri karena kekhawatiran terhadap GitHub dan harus menyesuaikan kebijakan kepercayaan PNPM untuk mengelola asal usul paket untuk modul-modulnya sendiri.
Mengapa Node.js membatasi file TypeScript di dalam node_modules?
Pembatasan ini bersifat filosofis lebih daripada teknis. Pemelihara Node.js menolak untuk menangani file TypeScript di bawah node_modules untuk mencegah pencemaran ekosistem, karena TypeScript adalah produk Microsoft.
🇯🇵 日本語
DenoからNodeへの移行:TypeScriptとパフォーマンスの洞察
多年間 Deno を主要なランタイムとして使用した後、著者は Svelte Kit クライアントプロジェクトのために Node に重々しく戻りました。彼は ECMAScript 機能が完全にサポートされており、時代遅れの `require()` 呼び出しが現代化されていることに気づきました。NPM のインストールは bash で行うのが公式の(そしてリスキーな)方法であるが、バージョン管理とセキュリティリスクの回避のために PNPM と FNM に切り替えました。Node が `node_modules` 内の TypeScript パッケージを制限していることは、ランタイムのメンテナーによる哲学的な選択であり、主要な不満の一つです。これを克服するために、著者は追加の設定ファイルのオーバーヘッドを受け入れながら `Tsdown` を使用してバンドルを行いました。Deno から Node v26.10.0 への静的サイトジェネレータの移動には最小限の変更しか必要ありませんでした。主に Deno API を `node:fs` に置き換え、Hono のアダプタを使用しました。この移行は驀然として 15% のビルド時間の短縮につながりました。著者は、彼のコードベースが依然として Deno を好むイディオマティックな傾向があり、ネイティブの Node API を活用することでさらなるパフォーマンス向上が可能であることを指摘しています。彼は GitHub に関する懸念から Forgejo を自己ホスティングしており、自身のモジュールのパッケージの起源を管理するために PNPM の信頼ポリシーを調整しなければなりませんでした。
なぜ Node.js は node_modules 内の TypeScript ファイルを制限するのですか?
この制限は技術的よりも哲学的なものです。Node.js のメンテナーは、TypeScript が Microsoft の製品であるため、エコシステムの汚染を防ぐために node_modules の下にある TypeScript ファイルを処理することを拒みます。
🇧🇷 Português
Migração de Deno para Node: Perspectivas de TypeScript e Desempenho
Após anos usando Deno como runtime principal, o autor finalmente voltou para Node intensamente para um projeto cliente Svelte Kit. Ele descobriu que os recursos ECMAScript são plenamente suportados e que as chamadas desatualizadas `require()` agora estão modernizadas. Embora a instalação de NPM via bash ainda seja o método oficial (e arriscado), ele mudou para PNPM e FNM para gerenciar versões e evitar riscos de segurança.
Uma frustração principal é a restrição do Node sobre pacotes TypeScript dentro de `node_modules`, uma escolha filosófica pelos mantenedores do runtime. Para resolver isso, ele usou `Tsdown` para empacotar, aceitando a sobrecarga de arquivos de configuração adicionais. Mover um gerador de sites estáticos de Deno para Node v26.10.0 exigiu mudanças mínimas, principalmente substituindo as APIs do Deno por `node:fs` e usando o adaptador do Hono.
Esta migração surpreendentemente resultou em 15% mais velocidade nos tempos de compilação. O autor observa que seu código ainda favorece idiomaticamente Deno, sugerindo que mais ganhos de desempenho são possíveis aproveitando as APIs nativas do Node. Ele está auto-hospedando Forgejo devido a preocupações com o GitHub e teve que ajustar as políticas de confiança do PNPM para gerenciar a procedência dos pacotes para seus próprios módulos.
Por que o Node.js restringe arquivos TypeScript dentro de node_modules?
A restrição é filosófica mais do que técnica. Os mantenedores de Node.js se recusam a lidar com arquivos TypeScript sob node_modules para evitar a poluição do ecossistema, pois TypeScript é um produto da Microsoft.
🇷🇺 Русский
Миграция с Deno на Node: TypeScript и инсайты производительности
После многих лет использования Deno в качестве основного рантайма, автор в конце концов вернулся на Node в значительной степени для проекта клиента Svelte Kit. Он обнаружил, что функции ECMAScript полностью поддерживаются, а устаревшие вызовы `require()` теперь модернизированы. Хотя установка NPM через bash остается официальным (и опасным) способом, он перешел на PNPM и FNM для управления версиями и избежания рисков безопасности. Одна из ключевых раздражающих сторон — это ограничение Node на TypeScript-пакеты внутри `node_modules`, философский выбор разработчиков рантайма. Чтобы преодолеть это, он использовал `Tsdown` для упаковки, принимая на вооружение дополнительные файлы конфигурации. Перенос статического генератора сайта с Deno на Node v26.10.0 потребовал минимальных изменений, в основном заменив API Deno на `node:fs` и использовав адаптер Hono. Эта миграция неожиданно привела к увеличению скорости сборки на 15%. Автор отмечает, что его код всё ещё идиоматично предпочитает Deno, что suggests, что дальнейшие улучшения производительности возможны с использованием нативных API Node. Он самостоятельно размещает Forgejo из-за проблем с GitHub и ему пришлось настроить политику доверия PNPM, чтобы управлять происхождением пакетов для собственных модулей.
Почему Node.js ограничивает TypeScript-файлы внутри node_modules?
Ограничение больше философское, чем техническое. Разработчики Node.js отказываются обрабатывать TypeScript-файлы внутри node_modules, чтобы предотвратить загрязнение экосистемы, поскольку TypeScript является продуктом Microsoft.
🇨🇳 简体中文
Deno 迁移到 Node:TypeScript 和性能见解
在多年使用 Deno 作为主要运行时的基础上,作者最终因一个 Svelte Kit 客户端项目而重返 Node。他发现 ECMAScript 特性已得到完全支持,而过时的 `require()` 调用也已现代化。虽然通过 bash 安装 NPM 仍然是官方(且有风险)的方法,但他选择了 PNPM 和 FNM 来管理版本并避免安全风险。一个关键的挫败感是 Node 对 `node_modules` 中 TypeScript 包的限制,这是运行时维护者的哲学选择。为弥补这一点,他使用了 `Tsdown` 进行打包,接受了额外配置文件的开销。将一个静态站点生成器从 Deno 迁移到 Node v26.10.0 只需要做出最少的更改,主要是将 Deno API 替换为 `node:fs`,并使用 Hono 的适配器。令人惊讶的是,这次迁移使得构建时间提高了 15%。作者指出,他的代码库仍然以惯用风格偏好 Deno,表明通过利用原生的 Node API 可能获得更多的性能提升。由于对 GitHub 的担忧,他自行托管 Forgejo,并不得不调整 PNPM 的信任策略,以管理他自己的模块包的来源。
为什么 Node.js 会限制 node_modules 内部的 TypeScript 文件?
这种限制更多的是哲学上的而非技术上的。Node.js 的维护者拒绝处理位于 node_modules 下的 TypeScript 文件,以防止生态系统被污染,因为 TypeScript 是一款由 Microsoft 开发的产品。