<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Javascript on Junian Dev</title><link>https://www.junian.dev/tags/javascript/</link><description>Recent content in Javascript on Junian Dev</description><generator>Hugo -- gohugo.io</generator><language>en-US</language><managingEditor>author@junian.dev (Junian Triajianto)</managingEditor><webMaster>author@junian.dev (Junian Triajianto)</webMaster><copyright>Copyright &amp;copy; 2014 - 2026 &lt;a href='https://www.junian.dev/'&gt;Junian.dev&lt;/a&gt;</copyright><lastBuildDate>Wed, 30 Sep 2026 04:00:00 +0700</lastBuildDate><atom:link href="https://www.junian.dev/tags/javascript/index.xml" rel="self" type="application/rss+xml"/><item><title>Changing Default Cloudflare Node.js Version</title><link>https://www.junian.dev/blog/change-cloudflare-node-version/</link><pubDate>Wed, 30 Sep 2026 04:00:00 +0700</pubDate><author>author@junian.dev (Junian Triajianto)</author><guid>https://www.junian.dev/blog/change-cloudflare-node-version/</guid><description>&lt;p&gt;Recently, one of my web projects failed to build on Cloudflare.
The reason is there is a post-postprocessing script that uses TypeScript instead of JavaScript, and I run it like this:&lt;/p&gt;
&lt;figure class="highlight"&gt;
&lt;button class="btn-clipboard chroma" title="Copy to clipboard"&gt;&lt;i class="fa icon-clipboard"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="feather feather-copy"&gt;&lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2"/&gt;&lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/&gt;&lt;/svg&gt;&lt;/i&gt;&lt;span class="msg-clipboard"&gt;&lt;/span&gt;&lt;/button&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ node scripts/indexnow.ts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;node:internal/modules/esm/get_format:219
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; throw new ERR_UNKNOWN_FILE_EXTENSION&lt;span class="o"&gt;(&lt;/span&gt;ext, filepath&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ^
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;TypeError &lt;span class="o"&gt;[&lt;/span&gt;ERR_UNKNOWN_FILE_EXTENSION&lt;span class="o"&gt;]&lt;/span&gt;: Unknown file extension &lt;span class="s2"&gt;&amp;#34;.ts&amp;#34;&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; /opt/buildhome/repo/scripts/indexnow.ts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; at Object.getFileProtocolModuleFormat &lt;span class="o"&gt;[&lt;/span&gt;as file:&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;node:internal/modules/esm/get_format:219:9&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; at defaultGetFormat &lt;span class="o"&gt;(&lt;/span&gt;node:internal/modules/esm/get_format:245:36&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; at defaultLoad &lt;span class="o"&gt;(&lt;/span&gt;node:internal/modules/esm/load:120:22&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; at async ModuleLoader.loadAndTranslate &lt;span class="o"&gt;(&lt;/span&gt;node:internal/modules/esm/loader:580:32&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; at async ModuleJob._link &lt;span class="o"&gt;(&lt;/span&gt;node:internal/modules/esm/module_job:116:19&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; code: &lt;span class="s1"&gt;&amp;#39;ERR_UNKNOWN_FILE_EXTENSION&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Node.js v22.16.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/figure&gt;&lt;p&gt;It makes sense because by the time I wrote this, Cloudflare uses Node.js v22.16.0 by default.
Meanwhile, Node.js support for native TypeScript execution is available for v22.18.0 or later, and I personally used v24.18.0 on my MacBook.&lt;/p&gt;</description></item></channel></rss>