3

我认为这主要是关于 regex 的问题,但我可能错了。


假设我想排除项目根目录中名为art.

我在 CLI 中的输出正则表达式如下所示:

blacklistRE: /(all|the|other|matchers|art\.*)$/

但这会导致错误:

Unable to resolve "art/core/color" from "..\..\node_modules\react-native\Libraries\ART\ReactNativeART.js"

如何在art不影响所有子目录的情况下排除顶级目录?

来自捆绑器的文档

blacklistRE 类型:RegExp

定义要忽略的路径的正则表达式。 https://facebook.github.io/metro/docs/configuration/#blacklistre

我正在调用的函数的代码: 它在这个文件中很短且独立,如果有人比我更擅长正则表达式可能有任何见解。https://github.com/facebook/metro/blob/8c53c38932c3e396109014ac707287fbdf2500d3/packages/metro-config/src/defaults/blacklist.js#L35-L44

我的完整代码如下所示:

const blacklist = require('metro-config/src/defaults/blacklist');

const regexStrings = [
  //  DEFAULTS
  '.*\\android\\ReactAndroid\\.*',
  '.*\\versioned-react-native\\.*',
  'node_modules[\\\\]react[\\\\]dist[\\\\].*',
  'node_modules[\\\\].cache[\\\\].*',
  'packages[\\\\]electron[\\\\].*',
  'node_modules[\\\\]electron.*',
  'website\\node_modules\\.*',
  'heapCapture\\bundle.js',
  '.*\\__tests__\\.*',
  '.*\\.git\\.*',
  // CUSTOM
  'art\\.*',
]

const constructBlacklistRE = () => {
  const formedRegexes = regexStrings.map(piece => new RegExp(piece));
  console.warn(formedRegexes);
  return blacklist([...formedRegexes]);
};

const config = {
  blacklistRE: constructBlacklistRE(),
}
4

1 回答 1

1

这应该有效:

const blacklist = require('metro-config/src/defaults/blacklist');
const path = require('path');

const ignoreTopLevelFolders = [
   'art'
   // add more top level folders here
].map(f => new RegExp(`${ path.resolve(f) }/.*`));

module.exports = { resolver: { blacklistRE: blacklist(ignoreTopLevelFolders) } };
于 2020-12-04T13:58:47.840 回答