В первую очередь за год + Я написал весь свой код, используя esm, а с пакетом std / esm я могу легко использовать зависимые пакеты с cjs без проблем без использования babel.
В nodejs V14 смешанный esm / cjs поддержка теперь включена без флага, и проект std / esm, похоже, сворачивается, поэтому я подумал, что должен попытаться выполнить миграцию, чтобы увидеть, что проблемы могут быть. Я нашел его.
https://github.com/standard-things/esm
https://nodejs.org/api/esm.html#esm_ecmascript_modules
Проблема, с которой я столкнулся, заключается в том, что в отличие от std / esm the esm / cjs поддержка, теперь включенная в V14 nodejs, нарушает именованный импорт (я предполагаю, что общий js экспорт модулей) , который отлично работал с std / esm.
Возьмем, например, https://github.com/sindresorhus/make-dir/blob/978bee9186bf0c41640ed21567921daf8c303225/index.js#L106
в качестве пакетов используется cjs. Вот экспорт
module.exports.sync = (input, options) => {
checkPath(input);
options = processOptions(options);
Использование "type":"module"
в моем пакете. json. В моем коде есть import import { sync as mkdir } from 'make-dir'
, который отлично работает с использованием std / esm . Но при использовании nodejs 14 он говорит, что не может найти именованный экспорт sync
. **
import { sync as mkdir } from 'make-dir'
^^^^
SyntaxError: The requested module 'make-dir' does not provide an export named 'sync'
Я застрял здесь? Мне нужно оставаться с std / esm? (но похоже, что проект уже завершен) Я не могу / не должен go использовать всю мою базу кода, вмещающую cjs модули с
import mk from 'make-dir'
const mkdir = mk.sync
Чтобы сделать это легко для любого воссоздать Я сделал репо, которое можно клонировать и запустить, чтобы увидеть эту разницу
https://github.com/dkebler/core-esm-named-import-error
Во всяком случае, предполагалось, что esm в версии 14 должен был стать заменой использования std / esm. Видимо нет :(.