0

新しい React Native プロジェクト (0.57.4) を初期化し、 Metroreact-native initバンドラーをプログラムで実行しようとしています。ただし、 React Native ソースの最初のモジュールであるReact Native の内部モジュール (例: ) を解決できません。AccessibilityInforequire

Error: Unable to resolve module `AccessibilityInfo` from `/myproject/node_modules/react-native/Libraries/react-native/react-native-implementation.js`: Module `AccessibilityInfo` does not exist in the Haste module map

キャッシュをクリアするための指示に従っても役に立ちません。

Metroバンドラーをプログラムで実行するために使用しているコードは次のとおりです。

const path = require('path')
const metro = require('metro')

const entry = './index.js'
const out = './build/index.bundle'
const platform = 'ios'
const root = process.cwd()

build()

async function build() {

  const config = {
    resolver: {
      providesModuleNodeModules: ['react-native'],
    },
    transformer: {
      babelTransformerPath: require.resolve('metro/src/reactNativeTransformer'),
    },
    serializer: {},
    server: {},
    projectRoot: root,
    watchFolders: [root, path.join(__dirname, 'node_modules', 'metro')],
  }

  const opts = { dev: false, entry, optimize: true, out, platform, sourceMap: true }

  return await metro.runBuild(config, opts)
}

ヘッダー コメントMetroでマークされた React Natives モジュールを解決できるようにする設定が不足している可能性があります。@providesModule

4

1 に答える 1

0

React Native が Metro に渡す構成を調べたところ、動作させるために必要ないくつかの追加設定、特にhasteImplModulePathgetModulesRunBeforeMainModulegetPolyfills.

const config = {
  resolver: {
    providesModuleNodeModules: ['react-native'],
    resolverMainFields: ['react-native', 'browser', 'main'],
    hasteImplModulePath: path.join(root, 'node_modules/react-native/jest/hasteImpl.js'),
    blacklistRE: /(.*\/__fixtures__\/.*|node_modules[\/\\]react[\/\\]dist[\/\\].*|website\/node_modules\/.*|heapCapture\/bundle\.js|.*\/__tests__\/.*)$/,
  },
  transformer: {
    babelTransformerPath: require.resolve('metro/src/reactNativeTransformer')
  },
  serializer: {
    getModulesRunBeforeMainModule: () => [
      path.join(root, 'node_modules/react-native/Libraries/Core/InitializeCore.js')
    ],
    getPolyfills: require(path.join(root, 'node_modules/react-native/rn-get-polyfills')),
  },
  server: {},
  projectRoot: root,
  watchFolders: [root, path.join(root, 'node_modules'), path.join(__dirname, 'node_modules')],
}
于 2018-12-03T20:33:50.323 に答える