Двойная поддержка ESM и CommonJS в существующем проекте Node.jsJavascript

Форум по Javascript
Anonymous
Двойная поддержка ESM и CommonJS в существующем проекте Node.js

Сообщение Anonymous »

Я обновляю проект Node.js для поддержки модулей CommonJS и ES (двойной пакет).
Моя текущая проблема возникает при попытке загрузить модуль из корня проекта, используя поле экспорта вместо основного.
Структура проекта

Код: Выделить всё

MiProject/
├── src/
│   ├── index.js  //CommonJS (module.exports)
│   └── index.mjs // ES Module (export default)
├── test/
│   ├── require.test.js  ← uses require('../')
│   └── import.test.js   ← uses import from '../'
└── package.json
Текущее поведение
Внутри test/require.test.js:

Код: Выделить всё

const mymodule = require('../');
Это работает только тогда, когда package.json использует:

Код: Выделить всё

{
"main": "./src/index.js"
}
Но если я заменю main на:

Код: Выделить всё

{
"exports": "./src/index.js"
}
Node.js не может загрузить модуль с помощью require('../').
Мне нужно реализовать условный экспорт, чтобы пакет можно было импортировать с помощью:

Код: Выделить всё

import mymodule from 'MiProject'; // ESM
const mymodule = require('MiProject'); // CommonJS
Это означает, что я должен использовать экспорт вместо основного с поддержкой обоих синтаксисов.


Подробнее здесь: https://stackoverflow.com/questions/798 ... js-project

Вернуться в «Javascript»