Baru di Node.js 20 — beragampengetahuan – Beragampengetahuan
Node.js versi 20 dirilis pada 18 April 2023. Ini membahas beberapa masalah dan kritik yang telah “ditangani” oleh Deno dan Bun, termasuk model izin baru dan pelari uji asli yang stabil. Artikel ini mengeksplorasi opsi baru yang tersedia bagi developer yang menggunakan runtime JavaScript yang paling banyak digunakan di dunia.
isi:
- Jadwal rilis Node.js
- Model izin baru
- Pelari tes asli
- Kompilasi satu aplikasi yang dapat dieksekusi
- Mesin JavaScript V8 yang diperbarui
- pembaruan bermacam-macam
Contents
Jadwal rilis Node.js
Node.js memiliki jadwal rilis enam bulan:
-
Rilis genap April (14, 16, 18, dll.) stabil dan menerima pembaruan Dukungan Jangka Panjang (LTS) selama tiga tahun.
-
Rilis bernomor ganjil pada bulan Oktober (15, 17, 19, dll.) Lebih eksperimental, dan pembaruan biasanya berakhir setelah satu tahun.
Secara umum, Anda harus memilih rilis LTS bernomor genap kecuali jika Anda memerlukan fungsionalitas khusus dalam rilis eksperimental dan berencana untuk memutakhirkan nanti. Yang mengatakan, Node.js 20 adalah baru, dan situs merekomendasikan agar Anda tetap menggunakan versi 18 sementara tim pengembangan memperbaiki masalah terbaru.
Node.js 20 memiliki fitur baru berikut…
Model izin baru
berlari node somescript.js Bukan tanpa risiko. Skrip dapat melakukan apa saja: menghapus file penting, mengirim data pribadi ke server, atau menjalankan program penambangan mata uang kripto dalam sebuah subproses. Sulit untuk menjamin bahwa kode Anda sendiri tidak akan merusak sesuatu: Bisakah Anda yakin bahwa semua modul dan dependensinya aman?
Model izin Node.js (eksperimental) yang baru membatasi apa yang dapat dilakukan skrip.Untuk menggunakannya, tambahkan --experimental-permission tandai milikmu node Baris perintah diikuti oleh:
-
--allow-fs-readMemberikan akses baca ke file. Anda dapat membatasi izin baca untuk:- Direktori khusus:
--allow-fs-read=/tmp/ - Dokumen khusus:
--allow-fs-read=/home/me/data.json - atau pola file wildcard:
--allow-fs-read=/home/me/*.json
- Direktori khusus:
-
--allow-fs-writeMemberikan akses tulis ke file dengan direktori, file, atau pola wildcard yang sama. -
--allow-child-processMengizinkan subproses untuk mengeksekusi skrip lain yang mungkin ditulis dalam bahasa lain. -
--allow-workerMengizinkan utas pekerja mengeksekusi kode Node.js secara paralel dengan utas pemrosesan utama.
Pada contoh di bawah ini, somescript.js dapat membaca file /home/me/data/ Daftar isi:
node --experimental-permission --allow-fs-read=/home/me/data/ somescript.js
Upaya apa pun untuk menulis ke file, menjalankan proses lain, atau memulai pekerja web akan meningkat ERR_ACCESS_DENIED kesalahan.
Anda dapat memeriksa izin di aplikasi Anda dengan yang baru process.permission Tujuan. Misalnya, berikut cara memeriksa apakah skrip dapat menulis ke file:
process.permission.has('fs.write');
Berikut cara memeriksa apakah skrip dapat menulis ke file tertentu:
if ( !process.permission.has('fs.write', '/home/me/mydata.json') ) {
console.error('Cannot write to file');
}
Manajemen izin JavaScript, pertama kali diperkenalkan oleh Deno, memberikan kontrol yang sangat baik atas akses ke file, variabel lingkungan, informasi sistem operasi, pengukuran waktu, jaringan, perpustakaan yang dimuat secara dinamis, dan proses anak.Node.js tidak aman secara default kecuali Anda menambahkan --experimental-permission spanduk. Ini kurang efisien, tetapi memastikan skrip yang ada akan terus berjalan tanpa modifikasi.
Pelari tes asli
Secara historis, Node.js adalah runtime minimal sehingga developer dapat memilih alat dan modul yang mereka butuhkan. Menjalankan pengujian kode memerlukan modul pihak ketiga seperti Mocha, AVA, atau Jest.Meskipun ini mengarah pada banyak pilihan, ini bisa sulit untuk dibuat terbaik Pengambilan keputusan dan alat peralihan mungkin tidak mudah.
Runtime lain mengambil tampilan lain dan menyediakan alat bawaan yang dianggap penting untuk pengembangan. Deno, Bun, Go, dan Rust semuanya menyediakan test runner bawaan. Pengembang memiliki pilihan default tetapi dapat memilih yang lain ketika proyek mereka memiliki persyaratan khusus.
Node.js 18 memperkenalkan test runner eksperimental, yang sekarang sudah stabil di versi 20. Tanpa menginstal modul pihak ketiga, Anda dapat membuat skrip pengujian:
- dalam proyek Anda
/test/Daftar isi - dengan memberi nama file
test.js,test.mjsatautest.cjs - menggunakan
test-di awal nama file – mis.test-mycode.js - menggunakan
testTambahkan titik (.), tanda hubung (-) atau garis bawah (_) – Misalnyamycode-test.js,mycode_test.cjsataumycode.test.mjs
Kemudian Anda dapat mengimpor node:test Dan node:assert dan tulis fungsi tes:
import { test, mock } from 'node:test';
import assert from 'node:assert';
import fs from 'node:fs';
test('my first test', (t) => {
assert.strictEqual(1, 1);
});
test('my second test', (t) => {
assert.strictEqual(1, 2);
});
mock.method(fs, 'readFile', async () => 'Node.js test');
test('my third test', async (t) => {
assert.strictEqual( await fs.readFile('anyfile'), 'Node.js test' );
});
menjalankan tes node --test test.mjs dan periksa hasilnya:
✔ my first test (0.9792ms)
✖ my second test (1.2304ms)
AssertionError: Expected values to be strictly equal:
1 !== 2
at TestContext.<anonymous> (test.mjs:10:10)
at Test.runInAsyncScope (node:async_hooks:203:9)
at Test.run (node:internal/test_runner/test:547:25)
at Test.processPendingSubtests (node:internal/test_runner/test:300:27)
at Test.postRun (node:internal/test_runner/test:637:19)
at Test.run (node:internal/test_runner/test:575:10)
at async startSubtest (node:internal/test_runner/harness:190:3) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: 1,
expected: 2,
operator: 'strictEqual'
}
✔ my third test (0.1882ms)
ℹ tests 3
ℹ pass 2
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 72.6767
Anda dapat menambahkan --watch Tandai untuk menjalankan kembali pengujian secara otomatis saat file berubah:
node --test --watch test.mjs
Anda juga dapat menjalankan semua pengujian yang ditemukan di proyek:
node --test
Pengujian asli adalah tambahan yang disambut baik untuk runtime Node.js.Tidak perlu lagi mempelajari API pihak ketiga yang berbeda, saya tidak lagi punya alasan untuk dilupakan Tambahkan tes untuk proyek yang lebih kecil!
Kompilasi satu aplikasi yang dapat dieksekusi
Proyek Node.js membutuhkan runtime untuk dieksekusi. Ini bisa menjadi penghalang saat mendistribusikan aplikasi ke platform atau pengguna yang tidak dapat menginstal atau memelihara Node.js dengan mudah.
Versi 20 menyediakan fitur eksperimental yang memungkinkan Anda membuat Aplikasi yang Dapat Dieksekusi Tunggal (SEA) yang dapat diterapkan tanpa ketergantungan. Manual menjelaskan prosesnya, meskipun agak berbelit-belit:
-
Anda harus memiliki proyek dengan skrip entri tunggal. Itu harus menggunakan CommonJS, bukan modul ES.
-
Buat file konfigurasi JSON untuk membuat skrip sebagai gumpalan yang berjalan dalam waktu proses. Misalnya,
sea-config.json:{ "main": "myscript.js", "output": "sea-prep.blob" } -
Menghasilkan gumpalan
node --experimental-sea-config sea-config.json. -
Tergantung pada sistem operasi Anda, Anda harus menyalin
nodedapat dieksekusi, hapus tanda tangan biner, masukkan blob ke dalam biner, tanda tangani ulang, dan uji aplikasi yang dihasilkan.
Saat berfungsi, Anda terbatas pada proyek CommonJS yang lebih lama, dan hanya menargetkan OS yang sama yang Anda gunakan. Mengingat bahwa kompiler Deno yang luar biasa dapat membuat executable untuk platform apa pun dengan satu perintah dari file sumber JavaScript atau TypeScript, pasti akan meningkat.
Anda juga harus mengetahui ukuran file dari hasil eksekusi.individu console.log('Hello World'); Menghasilkan file 85MB karena Node.js (dan Deno) memerlukan seluruh mesin JavaScript V8 dan pustaka standar terlampir. Opsi untuk mengurangi ukuran file sedang dipertimbangkan, tetapi kecil kemungkinannya kurang dari 25 MB.
Kompilasi tidak praktis untuk alat baris perintah yang kecil, tetapi merupakan pilihan yang lebih layak untuk proyek yang lebih besar seperti aplikasi server web yang lengkap.
Mesin JavaScript V8 yang diperbarui
Node.js 20 menyertakan versi terbaru dari mesin V8, yang menyertakan fitur JavaScript berikut:
pembaruan bermacam-macam
Juga menyediakan pembaruan dan peningkatan berikut:
meringkaskan
Node.js 20 adalah langkah maju yang besar. Ini adalah rilis yang lebih signifikan dan mengimplementasikan beberapa fitur Deno yang lebih baik.
Namun, ini menimbulkan pertanyaan: Haruskah Anda beralih ke Deno?
Deno hebat. Stabil, mendukung TypeScript secara asli, mengurangi waktu pengembangan, membutuhkan lebih sedikit alat, dan diperbarui secara berkala. Pada sisi negatifnya, ini sudah ada untuk waktu yang lebih sedikit, ada lebih sedikit modul, dan sering kali merupakan tiruan yang lebih dangkal dari pustaka Node.js.
Deno dan Bun layak dipertimbangkan untuk proyek baru, tetapi ada ribuan aplikasi Node.js yang ada. Deno dan Bun membuatnya lebih mudah untuk mengonversi kode, tetapi tidak selalu ada keuntungan yang jelas untuk beralih dari Node.js.
Kabar baiknya adalah kami memiliki ekosistem JavaScript yang berkembang pesat. Tim runtime belajar dari satu sama lain, dan pengembang mendapat manfaat dari pengembangan yang cepat.
rencana pengembangan website
metode pengembangan website
jelaskan beberapa rencana untuk pengembangan website, proses pengembangan website, kekuatan dan kelemahan bisnis pengembangan website
, jasa pengembangan website, tahap pengembangan website, biaya pengembangan website
#Baru #Node.js #beragampengetahuan