找不到模块:错误:无法解析“react-native/Libraries/Image/resolveAssetSource”

lav*_*ini 5 npm webpack react-native

我正在当前的反应本机项目中添加一个音频模块。我尝试安装几个模块(react-native-soundreact-native-track-player)。在两个模块中获取相同的错误输出,该输出始终指向“react-native/Libraries/Image/resolveAssetsource”,因为找不到模块。

ERROR in ./node_modules/react-native-track-player/lib/index.js
Module not found: Error: Can't resolve 'react-native/Libraries/Image/resolveAssetsource' in 'D:\workspaces\web\react\blink\node_modules\react-native-track-player\lib'
 @ ./node_modules/react-native-track-player/lib/index.js 1:401-459
 @ ./node_modules/react-native-track-player/index.js
 @ ./components/ui/BlinkAudio/BlinkAudio.web.js
 @ ./components/ui/BlinkAudio/index.web.js
 @ ./components/dialogs/ResourceDetails/ResourceDetails.js
 @ ./components/dialogs/ResourceDetails/index.js
 @ ./components/panels/catalog/CatalogPanel.js
 @ ./components/parts/Main/Main.js
 @ ./components/parts/Main/index.js
 @ ./index.web.js
Run Code Online (Sandbox Code Playgroud)

这是音频模块react-native-track-player的索引文件中的当前导入:

import { Platform, AppRegistry, DeviceEventEmitter, NativeEventEmitter, NativeModules } from 'react-native';
import resolveAssetSource from 'react-native/Libraries/Image/resolveAssetsource';
Run Code Online (Sandbox Code Playgroud)

我尝试修复此问题,包括从“react-native”导入中添加“resolveAssetsource”,如下所示:

import { 
    Platform, 
    AppRegistry, 
    DeviceEventEmitter, 
    NativeEventEmitter, 
    NativeModules, 
    resolveAssetsource 
} from 'react-native';
Run Code Online (Sandbox Code Playgroud)

但我不太确定这是否是最好的方法,通常我不喜欢直接接触包节点模块。

我还尝试从 webpack 加载器中排除音频模块,但没有结果。

 module: {
    loaders: [
      {
        test: /\.js?$/,
        exclude: function (modulePath) {
          return (
            /node_modules/.test(modulePath) &&
            !/node_modules(\\|\/)react-native-track-player/.test(modulePath)
          );
        },
Run Code Online (Sandbox Code Playgroud)

我想知道是否有人可以帮助我找到答案,是否可以处理这个react-native问题,因为我认为这些音频模块错误地调用了resolveAssetsource,或者另一方面,react-native没有'我不知道是否为第三方提供这个特定的库。

Chr*_*ras 2

这似乎是一个语法错误问题。没有命名的文件或模块,模块和文件名都是大写的。resolveAssetsourceresolveAssetSourceS

尝试删除react-native-track-playeryarn remove react-native-track-player再次安装它(或删除整个node_modules目录并yarn install再次运行),因为下面的源代码react-native-track-player/lib/index.js正确无任何错误:

import { Platform, AppRegistry, DeviceEventEmitter, NativeEventEmitter, NativeModules } from 'react-native';
import resolveAssetSource from 'react-native/Libraries/Image/resolveAssetSource';
Run Code Online (Sandbox Code Playgroud)

如果您在其他地方使用它,则必须像这样导入它:

import resolveAssetSource from 'react-native/Libraries/Image/resolveAssetSource';
Run Code Online (Sandbox Code Playgroud)

但这不是首选的方法,因为此方法是 RNImage类/组件的成员Image.resolveAssetSource(source),因此,最好只导入Image组件并像这样使用它:

import { 
    Platform, 
    AppRegistry, 
    DeviceEventEmitter, 
    NativeEventEmitter, 
    NativeModules, 
    Image  // Add Image import
} from 'react-native';

// and use the function as of Image method

let audioAssetSource = Image.resolveAssetSource(audioSource);
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,您都会让该方法发挥作用并解析资产源信息。