5

expo 用のパッケージを配布したい。このパッケージは、expo SDK36 でアプリをビルドしているときに作成されました。

多くの博覧会の依存関係と同様に、私は.ios.js,.android.jsおよび.web.js拡張機能を大量に使用しています。

npmで配布したソースをインポートすると、リゾルバーは.js区別なくインポートするだけです。

例として、このパッケージは expo で動作するはずです:

画像

これは@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. .native.jsのreactjsユーザー(expoおよびreact-nativeユーザーだけでなく)が.jsデフォルトでファイルをインポートするように使用しました
  2. (1)のため、他の反応ユーザー (react-native でも expo でもありません) は、react-native 拡張機能.web.js.ios.js.android.is.native.jsおよびをサポートするために何らかの追加の構成を必要としません.js
  3. (1).web.jsの代わりに好む場合、反応ユーザーが(2)のようにすることはできません。この場合、プロジェクトで反応ネイティブ拡張機能を構成する方法は何ですか?
  4. 反応ネイティブのすべてのユーザーのために、ネイティブ プロジェクトで拡張機能を構成できる場所を教えてもらえますか? (Webプロジェクトはwebpackで構成できると思いますconfig.resolve.extensions
4

1 に答える 1

2

メインフィールドについて

ノード モジュールでは、.d ファイル内のファイル拡張子を削除することで、バンドラーにプラットフォーム固有の「メイン」ファイルを解決させることができますpackage.json

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

ただし、バンドラーの解決は Webpack と Metro 以外のバンドラーでは異なる動作をする可能性があるため、これに反対することをお勧めします。1 つの「メイン」ファイルで、他のプラットフォーム固有のモジュールの内容を再エクスポートする方が安全です (これは編集で行ったようですが、完全を期すためにここに説明を残しておきます)。

index.js

export * from './module';
  • module.jsバニラJS
  • module.web.jsReact Native for Web
  • module.native.jsリアクトネイティブ
  1. (1)の代わりに好む場合.web.js、反応ユーザーが(2)のように行うことはできません。この場合、プロジェクトで反応ネイティブ拡張を構成する方法は何ですか?

.web.jsプロジェクトが React Native Web プロジェクトでなくても解決できることを覚えておくことが重要です。Create React App は.web.js、すべてのプロジェクトの拡張機能を解決します。

Web では、ユーザーconfig.resolve.extensionsは Webpack 構成のフィールドを変更することで、プラットフォームの拡張機能を構成できます。Expo では、これを実行して実行できますexpo customize:web

  1. ネイティブ拡張機能を構成する

これは、プロジェクトの Metro config: Exampleを編集することで実行できます。

于 2020-02-17T07:31:06.547 に答える