#javascript #node.js #commonjs #rollupjs #mjs
Вопрос:
У меня есть серверное приложение CJS и интерфейсное приложение ESM. И модуль узла, который я создал в ESM. Модуль узла отлично работает для моего приложения ESM, потому что они оба используют import
синтаксис ESM. Попытка использовать его в приложении CJS, очевидно, приводит к ошибкам, поскольку он не может прочитать синтаксис ESM import
.
Я пробовал использовать Rollup.js
для преобразования ESM
кода в CJS
и использования conditional exports
в моем package.json
файле, но это не работает.
Комментарии:
1. Важный вопрос: почему? Узел может импортировать либо до тех пор, пока ваш проект и ваши проекты зависимостей четко указывают, какой тип ES они используют (т. Е. Если в вашем коде используется ESM, вам необходимо указать
type: "module"
в своемpackage.json
)2. @Mike’Pomax’Camermans Привет, Майк. И потому, что у меня есть файл, такой как dataUtils, который используется в моих интерфейсных приложениях, а также в моих приложениях внутреннего api. Поэтому имеет смысл превратить его в пакет npm для этого файла. Поэтому мне нужно, чтобы он использовался в CJS, когда его использует мой внутренний api, и в ES6, когда его используют мои интерфейсные приложения.
3. Нет, не знаешь. Вы можете просто написать ES6 для обоих, потому что Node может импортировать и запускать ES6 совершенно нормально, даже в проектах, которые сами по себе являются CJ : просто установите правильные значения,
package.json
если в вашем коде используются модули ES вместо устаревшего подхода, требующего commonjs.