我有一个图书馆需要:
- 在 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/