Двойная поддержка 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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