【问题标题】:Link non-font assets using rnpm使用 rnpm 链接非字体资源
【发布时间】:2017-10-17 10:08:15
【问题描述】:

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

  1. 输入字体,比如./assets/fonts
  2. 将以下 sn-p 添加到 package.json:

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

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

编辑:更具体地说,我在./assets/raw 目录中添加了一个file.txt,并在package.json 中的rnpm 配置中的./assets/fonts 旁边添加了./assets/raw。运行react-native link 后,我预计file.txt 会出现在Android 项目资产目录(/android/app/src/main/assets)和iOS 项目的“复制捆绑资源”构建阶段,但它没有发生。 react-native link 运行正常,没有产生任何错误。

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

有什么想法或建议吗?

【问题讨论】:

  • 您能否提供更多关于您尝试过的方法和看到的结果的信息?
  • @ChrisGeirman 当然,请参阅更新。

标签: react-native assets react-native-cli


【解决方案1】:

在 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 类型(字体、文本等)对所有文件进行分组,但实际上只有字体被复制到项目中。

其他人之前遇到过这个问题。 a pull request 添加了对视频资产的支持,但没有合并。显然要走的路是使用打包器。

【讨论】:

  • 您能否详细说明“使用打包程序”的含义?
猜你喜欢
  • 1970-01-01
  • 2019-09-28
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
  • 2021-12-01
相关资源
最近更新 更多