我认为这主要是关于 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(),
}