Как раздать пакет для выставки? (.web. js,. js конфигурация) - PullRequest
3 голосов
/ 12 февраля 2020

Я хочу раздать пакет для выставки. Этот пакет был создан при сборке моего приложения в экспозиции SDK36.

Как и многие зависимости expo, я широко использую расширения .ios.js, .android.js и .web.js.

При импорте источника, который я распространил на npm, импорт только для распознавателя .js без каких-либо различий.

В качестве примера этот пакет должен работать с экспо:

image

Это @expo/webpack-config разрешенные расширения:

[
  ".web.expo.ts",
  ".web.expo.tsx",
  ".web.expo.mjs",
  ".web.expo.js",
  ".web.expo.jsx",
  ".expo.ts",
  ".expo.tsx",
  ".expo.mjs",
  ".expo.js",
  ".expo.jsx",
  ".web.ts",
  ".web.tsx",
  ".web.mjs",
  ".web.js",
  ".web.jsx",
  ".ts",
  ".tsx",
  ".mjs",
  ".js",
  ".jsx",
  ".json",
  ".wasm"
]

Но это не так, я должен импортировать вручную, используя суффикс в моих источниках с .web.

Как настроить expo или мой распределенный пакет, чтобы иметь возможность импортировать надлежащие источники для каждой среды, когда источники импортируются из node_modules?

Редактировать

Я ошибался, ожидая, что мои расширения будут работать с полем main моего package.json, я перенастроил репо с помощью:

/home/dka/workspace/github.com/yeutech-lab/react-cookiebot/src
├── CookieBot.js
├── CookieBot.native.js
└── index.js

Вопросы:

  1. I использовали .native.js, поэтому мои reactjs пользователи (не только пользователи expo и response-native) будут импортировать файл .js по умолчанию
  2. Из-за (1) , другие реагируют пользователю (ни реагирующему, ни экспо) не нужны какие-то дополнительные настройки для поддержки расширений реагирующего .web.js, .ios.js, .android.is, .native.js и .js.
  3. Если я предпочитаю .web.js вместо (1) , мой реагирующий пользователь не сможет сделать так, как в (2) , и в этом случае: как бы они могли сконфигурировать собственные расширения реакции в своем проекте?
  4. Для всех активных пользователей может Я знаю, где расширение может быть настроено в нативных проектах? (я считаю, что веб-проект можно настроить в веб-пакете с помощью config.resolve.extensions)

1 Ответ

1 голос
/ 17 февраля 2020

Относительно основного поля

В модуле узла вы можете заставить упаковщик разрешать специфицированный для платформы c "основной" файл, удалив расширение файла в вашем package.json .

 -  "main": "index.js"
 +  "main": "index"

Я бы посоветовал против этого, хотя разрешение пакетов могло бы работать по-другому в пакетах, отличных от Webpack и Metro. Было бы безопаснее, чтобы один «основной» файл реэкспортировал содержимое других платформенно-заданных модулей c (похоже, именно это вы и сделали в своем редактировании, но я оставлю здесь пояснение для полноты):

index.js

export * from './module';
  • module.js Ваниль JS
  • module.web.js React Native для веб
  • module.native.js React Native
В случае, если я предпочитаю .web.js вместо (1), мой реагирующий пользователь не сможет сделать так, как в (2), и в этом случае: как бы он мог настроить реагирующее собственные расширения в их проекте?

Важно помнить, что .web.js все еще может быть разрешена, даже если проект не является веб-проектом React Native. Create React App разрешает .web.js расширения для каждого проекта.

В Интернете пользователи могут настраивать свои расширения платформы, изменяя поле config.resolve.extensions конфигурации Webpack. В Expo это можно сделать, набрав expo customize:web.

Настройка собственных расширений

Это можно сделать, отредактировав конфигурацию Metro проекта: Пример .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...