node.js - 构建时从 React Metro Bundler 中排除特定包

标签 node.js react-native webpack

我有一个图书馆需要:

  • 在 React Native 中运行时的 rnkata.js
  • 在浏览器中运行时的 webkata.js
  • 在 Node 中运行时的nodekata.js

只要我只针对 Node/网络,这个 hack 就可以正常工作:

if (getEnv() == "node") {
  eval('require')('nodekata')
} else {
  require('webkata')
}

但是一旦我开始定位移动设备,metro bundler 就会提示“webkata 不可用”:

if (getEnv() == "node") {
  eval('require')('nodekata')
} else if (getEnv() == "mobile") {
  require('rnkata')
} else {
  require('webkata')
}

显然,我不能使用相同的 eval hack - 或者我破坏了 webpack 或 RN。是否有一些关于如何处理这种情况的文件? IE:我如何抑制平台对“require”调用的捆绑或解释。

是否有“按模块名称抑制”功能?还是通过其他方式获得特定于平台的模块?

最佳答案

Metro 最近添加了对可选导入的支持。它应该在 React Native v0.63.0 中可用。参见 this问题和this PR 了解更多详情。

您还可以考虑为文件命名以显示它们支持的平台。例如:

index.js - web version
index.native.js - android & ios only version
index.android.js - android version
index.ios.js - ios version

关于node.js - 构建时从 React Metro Bundler 中排除特定包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62901001/

相关文章:

reactjs - 在 React js 中对 .map 数据进行排序(在顶部显示最新日期)

javascript - Angular webpack ui-bootstrap 不引入 css

webpack - 为什么 hot-update.json 文件挤满了我的项目目录

javascript - Electron - TypeError : core. require is not a function

git - 如何在 Ubuntu 服务器上从 git 安装和支持 Node.js 应用程序

javascript - 使用带有快速服务器的文件

javascript - 为什么 Json stringify 在使用 Express 向前端发送数组时有帮助?

javascript - react-native app 已经启动,现在添加导航

node.js - 如何修复第三方库中的动态需求?

javascript - 如何在 React Native 中将数组附加到 FormData 中