Я разрабатываю библиотеку javascript, и я установил поля 'browser', 'module' и 'main' в package.json, каждое из которых имеет свою точку входа.
// package.json
"main": "./dist/umd/index.js",
"browser": "./dist/browser/index.js",
"module": "./dist/esm/index.js",
...
Вв браузере, библиотека открывается в окно как глобальная функция, поэтому ее можно использовать с тегом script, например:
const x = 42;
const msg = match(x)
.caseLessThan(0, "Negative values not allowed")
.default(_ => `${_} items selected`);
alert(msg);
<script src="https://unpkg.com/x-match-expression/dist/browser/index.js"></script>
Проблема заключается в том, что при попытке использовать библиотеку в другом проекте с веб-пакетом, она по умолчанию использует точку входа «браузер», и функция не разрешается правильно, получая неопределенную ошибку во время выполнения.
import {match} from "x-match-expression";
const x = 42;
const msg = match(x) // <--- match is undefined at runtime with default webpack settings
.caseLessThan(0, "Negative values not allowed")
.default(_ => `${_} items selected`);
Я знаю, что поля разрешения могут быть установлены в веб-пакете, установив resol.mainFields, но это было бы нелогично для пользователей моей библиотеки, поэтому мне пришлось удалить «браузер»'точка входа в package.json, но я не знаю, есть ли лучший подход.
Должен ли я использовать поле' browser 'в package.json?Или я должен просто предоставить пакет браузера, но без ссылки на него в package.json для использования с тегом скрипта?