Spec-Zone.ru › Deno 2

Обновление с CommonJS на ESM

Если ваш проект Node.js использует модули CommonJS (например, он использует require), вам нужно обновить код на использование модулей ECMAScript (ESM), чтобы он работал в Deno. Это руководство поможет вам обновить ваш код на использование синтаксиса ESM.

Импорт и экспорт модулей

Deno поддерживает модули ECMAScript исключительно. Если ваш код Node.js использует require, вы должны обновить его на использование import операторов вместо этого. Если ваш внутренний код использует экспорт в стиле CommonJS, их также нужно обновить.

Типичный проект в стиле CommonJS может выглядеть примерно так:

add_numbers.js
module.exports = function addNumbers(num1, num2) {
  return num1 + num2;
};
index.js
const addNumbers = require("./add_numbers");
console.log(addNumbers(2, 2));

Для преобразования этих модулей в модули ECMAScript, мы внесём несколько незначительных изменений:

add_numbers.js
export function addNumbers(num1, num2) {
  return num1 + num2;
}
index.js
import { addNumbers } from "./add_numbers.js";
console.log(addNumbers(2, 2));

Экспорт:

CommonJS ECMAScript modules
module.exports = function add() {} export default function add() {}
exports.add = function add() {} export function add() {}

Импорт:

CommonJS ECMAScript modules
const add = require("./add_numbers"); import add from "./add_numbers.js";
const { add } = require("./add_numbers") import { add } from "./add_numbers.js"

Быстрое исправление с помощью VS Code

Если вы используете VS Code, вы можете использовать его встроенную функцию для преобразования CommonJS в ES6 модули. Щёлкните правой кнопкой мыши по оператору require, или значку лампочки и выберите Quick Fix, а затем Convert to ES module.

Quick Fix

CommonJS против ECMAScript разрешения

Важное отличие между двумя системами модулей заключается в том, что разрешение ECMAScript требует полного спецификатора включая расширение файла. Пропуск расширения файла и специальная обработка index.js, являются уникальными особенностями CommonJS. Преимущество разрешения ECMAScript заключается в том, что оно работает одинаково в браузере, Deno и других средах выполнения.

CommonJS ECMAScript modules
"./add_numbers" "./add_numbers.js"
"./some/directory" "./some/directory/index.js"
Подсказка

Deno может добавить все недостающие расширения файлов за вас, выполнив deno lint --fix. Линтер Deno поставляется с правилом no-sloppy-imports, которое покажет ошибку линтера, когда путь импорта не содержит расширение файла.

🦕 Теперь, когда вы знаете, как перенести код с CJS на ESM, вы можете воспользоваться современными функциями, которые предлагает ESM, такими как асинхронная загрузка модулей, взаимодействие с браузерами, лучшая читаемость, стандартизация и будущее доказательство.

© 2018–2024 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/runtime/tutorials/cjs_to_esm

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API