Оголошено про випуск Node.js 20! Основні моменти включають нову модель дозволів Node.js, синхронний import.meta.resolve, стабільний test_runner, оновлення механізму JavaScript V8 до 11.3, Ada до 2.0 тощо!
Проект продовжує розвиватися в багатьох сферах, з багатьма новими функціями та виправленнями, що входять до існуючих випусків LTS. З цієї причини зміни, описані в журналі змін для Node.js 20, представляють лише невелику частину функцій і працюють з останнього великого випуску.
Node.js 20 отримає довгострокову підтримку (LTS) у жовтні 2023 року, але до того часу він буде «Поточним» випуском протягом наступних шести місяців. Ми заохочуємо вас ознайомитися з новими функціями та перевагами цього останнього випуску та оцінити їхній потенційний вплив на ваші програми.
Помітні зміни
Модель дозволу
Модель дозволів Node.js — це експериментальний механізм для обмеження доступу до певних ресурсів під час виконання.
У цьому першому випуску, що містить модель дозволів, функції мають такі можливості:
- Обмеження доступу до файлової системи (читання та запис)
- Використовуйте
--allow-fs-readі--allow-fs-write
- Використовуйте
- Обмежити доступ до
child_process- використання
--allow-child-process
- використання
- Обмежити доступ до
worker_threads- використання
--allow-worker
- використання
- Обмежити доступ до власних аддонів (те саме, що
--no-addonsпрапорець)
Доступні дозволи задокументовані прапором --experimental-permission.
Під час запуску Node.js за допомогою --experimental-permissionможливості доступу до файлової системи, процесів породження та використання node:worker_threadsбуде обмежено.
Розробники, які використовують Node.js, тепер мають більше контролю над доступом до файлової системи завдяки введенню прапорців --allow-fs-readі --allow-fs-write. Ці експериментальні функції дозволяють більш детально контролювати, до яких частин файлової системи можуть отримати доступ процеси Node.js.
Щоб увімкнути ці прапорці, розробники можуть використовувати --experimental-permissionпрапор разом із потрібними дозволами. Наприклад, виконання наступної команди дозволяє як читати, так і записувати доступ до всієї файлової системи:
|
1 2 |
<span class="hljs-meta prompt_">$ </span><span class="language-bash">node --experimental-permission --allow-fs-read=* --allow-fs-write=* index.js</span> |
Розробники також можуть вказати конкретні шляхи для доступу до файлової системи, передаючи значення, розділені комами, до прапорців. Наприклад, наступна команда дозволяє записувати доступ до /tmp/папки:
|
1 2 |
<span class="hljs-meta prompt_">$ </span><span class="language-bash">node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read=/home/index.js index.js</span> |
Шаблони підстановок також можна використовувати для надання доступу до кількох файлів або папок одночасно. Наприклад, наступна команда дозволяє читати всі файли та папки в каталозі /home/, які починаються з test:
|
1 2 |
<span class="hljs-meta prompt_">$ </span><span class="language-bash">node --experimental-permission --allow-fs-read=/home/test* index.js</span> |
Коли модель дозволів увімкнено, нову permissionвластивість об’єкта processможна використовувати для перевірки, чи надано певний дозвіл під час виконання.
|
1 2 3 |
process.<span class="hljs-property">permission</span>.<span class="hljs-title function_">has</span>(<span class="hljs-string">'fs.write'</span>); <span class="hljs-comment">// true</span> process.<span class="hljs-property">permission</span>.<span class="hljs-title function_">has</span>(<span class="hljs-string">'fs.write'</span>, <span class="hljs-string">'/home/nodejs/protected-folder'</span>); <span class="hljs-comment">// true</span> |
Важливо зазначити, що ці функції все ще є експериментальними та можуть змінитися в майбутніх випусках Node.js
Кастомні хуки ESM наближаються до стабільності
Кастомні хуки життєвого циклу модуля ES, які надаються через завантажувачі ( --experimental-loader=./foo.mjs), тепер виконуються у виділеному потоці, ізольованому від основного. Це забезпечує окрему область видимості для завантажувачів і гарантує відсутність перекрестного впливу між завантажувачами та кодом додатків.
У відповідності з поведінкою браузера import.meta.resolve()тепер повертається синхронно; зауважте, що resolveхуки в користувальницьких завантажувачах можуть залишатися асинхронними, якщо цього бажає автор завантажувача, і import.meta.resolveвсе одно повертатимуться синхронно в коді програми.
Ці зміни були останніми незавершеними елементами перед позначенням завантажувачів ESM як стабільних. Через деякий час є наміри позначити прапорець завантажувачів import.meta.resolveі хуки resolve таloadяк стабільні. Це має сприяти більш широкому застосуванню ESM.
V8 11.3
Як зазвичай, нова версія двигуна V8 включена в Node.js (оновлена до версії 11.3, яка є частиною Chromium 113), що забезпечує покращену продуктивність і нові мовні функції