我有一个项目文件夹,其中包含在React和React-native上开发的Web应用程序和Mobile应用程序,有一个Web依赖项,它在安装后脚本中添加了SymLink,我面临的问题是React-native Packager服务器也选择了上该符号链接,App无法正常运行。 最初,我遵循了这个-how to make react native packager ignore certain directories,但是getBlacklistRE默默地忽略了我正在传递的任何正则表达式。
编辑 这是我面临的实际问题,并且我尝试实施其中提到的所有解决方案,但尚未成功。 -https://github.com/facebook/react-native/issues/19763
EDIT2 现在在我看来黑名单不起作用,并且由于我在网络中使用的Babel版本与下面的React Native版本之间的冲突也可能是我的package.json
答案 0 :(得分:0)
您提到尝试黑名单没有运气。我没有网络并排响应本机项目,但是我确实有一个嵌套在我的本机项目中的网络项目,因此这可能有所帮助。黑名单确实对我有用,这就是它的实现方式。
在rn-cli.config.js中
const blacklist = require('metro/src/blacklist');
module.exports = {
getTransformModulePath() {
return require.resolve('./customTransformer'); // More on this below
},
getBlacklistRE() {
return blacklist([
/apps\/.*/,
]);
},
};
我的项目根目录中有一个名为apps /的目录。在应用程序内部,我相当于React Native的UI资源管理器(嵌套的React Native应用程序)和Web文档(React Web应用程序)。通过将此目录列入黑名单,我项目的根目录下的react native打包程序将不会加载那些节点模块,否则会发生不必要的冲突。
customTransformer可能在这里没有直接帮助,但如果您有帮助,我会在其中提供帮助。我用它用一个空对象替换本地模拟数据文件,以便最终构建的模拟数据被剥离。如果您不了解,可能有一种方法可以帮助您完成项目。
// Note transformer was renamed to reactNativeTransformer effective in RN 0.56.x
const upstreamTransformer = require('metro/src/reactNativeTransformer');
module.exports.transform = function (input) {
const { filename, options, src } = input;
let newSrc = src;
if (filename.indexOf('mocks') > -1 && !options.dev) {
newSrc = 'module.exports = {}';
}
return upstreamTransformer.transform({ src: newSrc, filename, options });
};