3

有很多关于使用 rnpm 包含字体资源的教程。这些是步骤:

  1. 把字体放进去,比如说,./assets/fonts
  2. 将以下代码段添加到 package.json:

    "rnpm": {
      "assets": [
        "./assets/fonts",
      ]
    }
    
  3. 运行react-native link

适用于字体资源,但其他类型呢?我需要包含一个文本文件,但对文本文件资产重复上述步骤似乎没有任何效果。我错过了什么?互联网上没有提及,所以我什至不确定使用 rnpm 是否可行。

编辑:更具体地说,我file.txt./assets/raw目录中添加了一个,并在 package.json的配置中添加了./assets/raw旁边。运行后,我预计会出现在 Android 项目资产目录(运行正常,没有产生错误。./assets/fontsrnpmreact-native linkfile.txt/android/app/src/main/assetsreact-native link

我的最终目标是在应用程序包中包含一个文本文件,并在运行时访问它。另一种选择是将文本包装在 JSON 中,但这样最终会在 JS 包中增加约 25% 的大小,这可能不太好。有些人还建议react-native-fs阅读该文件,但我不确定将其放在哪里,以便它可用于 Android 和 iOS。rnpm 知道在哪里放置 Android 和 iOS 的资产(以及如何将它们复制到捆绑包),所以使用它似乎是要走的路,但我不能让它与文本资产一起使用。

有什么想法或建议吗?

4

1 回答 1

0

在 React Native CLI 中挖掘之后,我发现react-native link, 只处理字体。这是来自的相关代码/node_modules/react-native/local-cli/link/android/copyAssets.js

/**
 * Copies each file from an array of assets provided to targetPath directory
 *
 * For now, the only types of files that are handled are:
 * - Fonts (otf, ttf) - copied to targetPath/fonts under original name
 */
module.exports = function copyAssetsAndroid(files, targetPath) {
  const assets = groupFilesByType(files);

  (assets.font || []).forEach(asset =>
    fs.copySync(asset, path.join(targetPath, 'fonts', path.basename(asset)))
  );
};

如您所见,groupFilesByType所有文件按其 MIME 类型(字体、文本等)分组,但实际上只有字体被复制到项目中。

其他人之前遇到过这个问题。有一个拉取请求添加对视频资产的支持,但它没有被合并。显然要走的路是使用打包程序。

于 2017-10-18T12:01:59.793 回答