несколько модулей npm и основные точки входа - PullRequest
1 голос
/ 14 мая 2019

Я создаю пакет, который поддерживает модули CommonJS и ES.У меня это работает нормально для одной точки входа.Я написал свой код как ESM и с помощью Babel скомпилировал его в CJS перед публикацией.Соответствующий бит моего package.json выглядит следующим образом:

  "main": "cjs/",
  "module": "esm/",
  "scripts": {
    "test": "jest ./test",
    "clean": "rm -rf cjs",
    "build": "npm run clean && babel esm --out-dir cjs",
    "prepare": "npm test && npm run build"
  }

Так что мой index.js находится в esm/index.js, а cjs/index.js не существует до публикации пакета.Если пакет включен с помощью require (например, const myPackage = require('my-package')), он будет извлекать из cjs/.Если он импортирован (например, import myPackage from 'my-packge'), он извлечет из esm/.

Моя проблема в том, что я хочу иметь возможность импортировать другие файлы из пакета (например, import adapter from 'my-package/adapters/mysql' или const adapter = require('my-package/adapters/mysql')),Но если я включу его таким образом, файл не будет найден.

Я могу импортировать его, используя полный путь (например, import adapter from 'my-package/esm/adapters/mysql' или const adapter = require('my-package/cjs/adapters/mysql')).Но я не хочу явно указывать тип модуля в пути.Кажется, что узел уже знает, как определить разницу между CJS и модулем ES (он знает, что требуется от main и импорт из module), поэтому я надеюсь, что можно сделать то же самое с несколькими файлами.

Есть ли способ включить пакет, как я описал выше, без необходимости явно указывать путь к esm/ или cjs/?

...