Как выбрать «модуль» вместо «основного» файла в package.json - PullRequest
0 голосов
/ 26 сентября 2018

Я создал несколько модулей npm и скомпилировал их в:

  • commonJS (используя exports.default =) и
  • esm (используя export default)

Я настроил свой package.json так:

main: "index.cjs.js",
module: "index.esm.js"

Когда я установил пакет npm и просто импортировал его, как:

import myPackage from 'my-package'

Он автоматически выберет *Файл 1017 *, а не модуль.

Мой вопрос:

Есть ли способ импортировать файл module вместо выполнения import myPackage from 'my-package' в файле JavaScript?

Почему я выбираю файл commonJS для «main»:

Я заметил, что при использовании Node импорт файла esm невозможен из-за export default, это должен быть commonJS.У меня есть несколько простых вспомогательных JS-функций, таких как , и , , и я бы хотел, чтобы они были доступны для самой широкой аудитории.Вот почему я выбрал cjs для "main" пути в package.json.

Почему я определяю отдельный "модуль" в package.json:

Множество известных библиотек, таких как Vue.JS уже делают это.См. Дополнительную информацию по этому потоку Stackoverflow:

Для чего нужно поле "module" package.json?

Почему я хочу иметь возможность импортировать модуль ""file вместо" main "file:

В Rollup в настоящее время есть ошибка , из-за которой он не будет правильно отображать комментарии JSDoc при кодировании после импорта файла cjs, но это работает при импорте файла es.

Обходной путь, которого я хочу избежать:

Просто установите "main" для файла esm в package.json, право?Но тогда все пользователи, которые используют мои пакеты в приложениях Node, больше не смогут его использовать ...

→ Я действительно смущен всем этим, но я думаю, что провел достаточно исследований, чтобы сделатьсмысл всего этого.При этом, если кто-то знает лучший подход или какой-либо другой совет, пожалуйста, сообщите мне в комментариях ниже !!

1 Ответ

0 голосов
/ 20 декабря 2018

Только не используйте расширение для основного файла и имейте es6 и версию CommonJS как два отдельных файла с тем же именем и в том же каталоге, но с другим расширением, поэтому:

index.js // transpiled CommonJS code for old nodejs
index.mjs // es6 module syntax

и вpackage.json:

{
  "main": "index"
}

Если узел запускается с флагом --experimental-modules, он будет использовать файл *.mjs, в противном случае *.js.

...