将本机模块列入黑名单不起作用

时间:2018-07-17 14:28:38

标签: reactjs react-native

我有一个项目文件夹,其中包含在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 enter image description here

1 个答案:

答案 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 });
};