Mucahid Yazar
mucahid.dev

Follow

mucahid.dev

Follow
Super Simple Start to ESModules in Node.js

Super Simple Start to ESModules in Node.js

Mucahid Yazar's photo
Mucahid Yazar
·Jun 18, 2021·

3 min read

Node.js’in tüm desteklenen versiyonları artık ESModules’ü destekliyor. Bu yazımızda bunu nasıl çok basit bir şekilde yapacağımızı göstereceğim.

30 Nisan 2021'de, Node v10 resmi olarak “kullanım ömrünün sonuna” ulaşacak (Node Release sayfasından daha fazla bilgi edinin). Bu heyecan verici çünkü Node.js JavaScript runtime desteklenen her sürümünün, Node’un resmi EcmaScript Modüllerini destekleyeceği anlamına geliyor! Bu değişiklikle ilgili karışık duygular var (bazıları Node.js ekosisteminde CommonJS’ye bağlı kalmamızı tercih ederdi), ancak konuyla ilgili fikriniz ne olursa olsun, ESModüller burada ve onlar gelecek. Öyleyse onları bir Node.js ortamında nasıl kullanacağımızı öğrenelim.

Note: You might be interested in my companion post Super Simple Start to ESModules in the Browser

First, we need the JavaScript we want to run:

İlk olarak ihtiyacımız olan, çalıştıracağımız get-files.js isimli javascript dosyasını aşağıya bırakıyorum. Ve burada dikkat edin “import ve export” kullanıyoruz yani modern javascript ES Modules özelliklerini kullanıyoruz.

Burada olan şu:

  • getFiles fonksiyonu bir dizin yani path parametresi alıyor. Ve bu dizindeki dosyaların bazı özelliklerini bir array içinde dönüyor bize. Örnek array yapısı aşağıdaki gibi olacak. Yani typeda dosya veya klasör olduğu, filepathda dosya yolu, content’de ise odosyanın içindeki herşeyi satır satır string olarak bize dönecek.
    [{ type: ‘file’, filepath: ‘package.json’, content: ‘…’ }]

Next, let’s make a JavaScript file that imports this and runs it:

Sonra bir index dosyası oluşturup yukarıdaki util fonksiyonumuzu import ederek kullanalım.

Eğer hiçbir ayar yapmadan çalıştırırsak aşağıda ki konsol hatasını alacağız. Aşağıdaki kodla çalıştırıp terminal hatasını göreceksiniz.
node index.js

node .
2(node:5369) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
3(Use `node --trace-warnings ...` to show where the warning was created)
4/Users/kentcdodds/Desktop/super-simple-start-to-esm-in-node/index.js:1
5import {getFiles} from './get-files.js'
6^^^^^^
7
8SyntaxError: Cannot use import statement outside a module
9 at wrapSafe (internal/modules/cjs/loader.js:979:16)
10 at Module._compile (internal/modules/cjs/loader.js:1027:27)
11 at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
12 at Module.load (internal/modules/cjs/loader.js:928:32)
13 at Function.Module._load (internal/modules/cjs/loader.js:769:14)
14 at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
15 at internal/main/run_main_module.js:17:47

Node.js projesi bazen breaking changelerle karşılaşacaktır ve bu normaldir, ancak burada olan ise bir non-starter durumudur yani hiçbir breaking change ile karşılaşmadan çalışmama durumudur. Bu yüzden ESM kullanmak bir seçimdir. Fakat bu şekilde kullanmak istersek burada 2 seçeneğimiz olduğunu biliyoruz.

Birincisi, dosyalarımızın uzantısını .Js’den .mjs’ye geçerek başarıyla import kullanan .mjs dosyalarımızı çalıştırabiliriz.

İkincisi en basiti “type”: “module” satırını bir package.json ekleyerek .js dosyalarımızı süper basit bir şekilde başarıyla çalıştırabiliriz.

İkinci seçenekle gidelim, böylece tüm dosyalarımızı yeniden adlandırmak zorunda kalmayalım. Bunu bir package.json içine koyun:

{
"type": "module"
}

Ve şimdi tekrar çalıştırıyoruz. Ve sonuç aşağıda ki gibi olacaktır sizde de eminim :)

node .
2[
3 {
4 type: 'file',
5 filepath: 'get-files.js',
6 content: "import path from 'path'\n" +
7 // clipped for brevity
8 'export {getFiles}\n'
9 },
10 {
11 type: 'file',
12 filepath: 'index.js',
13 content: "import {getFiles} from './get-files.js'\n" +
14 '\n' +
15 "console.log(await getFiles('.'))\n"
16 },
17 {
18 type: 'file',
19 filepath: 'package.json',
20 content: '{\n "type": "module"\n}\n'
21 }
22]

Ve işte bu kadar basit bir şekilde doğal native ESM kodlarımızı node.js ile çalıştırıyoruz.

Eğer official destek duyurusunu ve detaylarını okumak isterseniz, detaylara aşağıdaki linkten ulaşabilirsiniz.
https://nodejs.medium.com/announcing-core-node-js-support-for-ecmascript-modules-c5d6dc29b663

Bu makalenin orjinali için ayrıca aşağıdaki linkten göz atabilirsiniz.
https://kentcdodds.com/blog/super-simple-start-to-es-modules-in-node-js

 
Share this