Обновление с CommonJS на ESM
Если ваш проект Node.js использует модули CommonJS (например, он использует require), вам нужно обновить код на использование модулей ECMAScript (ESM), чтобы он работал в Deno. Это руководство поможет вам обновить ваш код на использование синтаксиса ESM.
Импорт и экспорт модулей
Deno поддерживает модули ECMAScript исключительно. Если ваш код Node.js использует require, вы должны обновить его на использование import операторов вместо этого. Если ваш внутренний код использует экспорт в стиле CommonJS, их также нужно обновить.
Типичный проект в стиле CommonJS может выглядеть примерно так:
module.exports = function addNumbers(num1, num2) {
return num1 + num2;
};
const addNumbers = require("./add_numbers");
console.log(addNumbers(2, 2));
Для преобразования этих модулей в модули ECMAScript, мы внесём несколько незначительных изменений:
export function addNumbers(num1, num2) {
return num1 + num2;
}
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.
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