React native 如何使react native packager忽略某些目录
问题: 我的项目在试图从命令行运行React native 如何使react native packager忽略某些目录,react-native,React Native,问题: 我的项目在试图从命令行运行react native run ios时发生@providesModule命名冲突。它与由另一个npm包esdoc创建的自动生成的dirdist/冲突。我希望能够保留这个自动生成的目录,只需让react原生打包程序忽略dist/dir即可 错误消息: [01/23/2017, 13:17:07] <START> Building Haste Map Failed to build DependencyGraph: @providesModu
react native run ios
时发生@providesModule命名冲突。它与由另一个npm包esdoc创建的自动生成的dirdist/
冲突。我希望能够保留这个自动生成的目录,只需让react原生打包程序忽略dist/
dir即可
错误消息:
[01/23/2017, 13:17:07] <START> Building Haste Map
Failed to build DependencyGraph: @providesModule naming collision:
Duplicate module name: ann
Paths: /Users/thurt/projects/example/package.json collides with /Users/thurt/projects/example/dist/esdoc/package.json
This error is caused by a @providesModule declaration with the same name across two different files.
Error: @providesModule naming collision:
Duplicate module name: ann
Paths: /Users/thurt/projects/example/package.json collides with /Users/thurt/projects/example/dist/esdoc/package.json
This error is caused by a @providesModule declaration with the same name across two different files.
at HasteMap._updateHasteMap (/Users/thurt/projects/example/node_modules/react-native/packager/react-packager/src/node-haste/DependencyGraph/HasteMap.js:158:13)
at p.getName.then.name (/Users/thurt/projects/example/node_modules/react-native/packager/react-packager/src/node-haste/DependencyGraph/HasteMap.js:133:31)
[01/23/2017,13:17:07]建筑快速地图
未能生成DependencyGraph:@ProvideModule命名冲突:
重复模块名称:ann
路径:/Users/thurt/projects/example/package.json与/Users/thurt/projects/example/dist/esdoc/package.json冲突
此错误是由跨两个不同文件使用相同名称的@ProvideModule声明引起的。
错误:@providesModule命名冲突:
重复模块名称:ann
路径:/Users/thurt/projects/example/package.json与/Users/thurt/projects/example/dist/esdoc/package.json冲突
此错误是由跨两个不同文件使用相同名称的@ProvideModule声明引起的。
在HasteMap.\u updateHasteMap(/Users/thurt/projects/example/node\u modules/react native/packager/react packager/src/node-haste/DependencyGraph/HasteMap.js:158:13)
在p.getName.then.name(/Users/thurt/projects/example/node_modules/react native/packager/react packager/src/node haste/DependencyGraph/HasteMap.js:133:31)
此配置有在RN版本之间更改的习惯。有关创建配置文件、加载配置文件和清除缓存的特定于版本的说明,请参见下文
对于React Native>=0.64(?)
这是推测性的,因为0.64尚未发布,在0.64的RN中
在项目根目录中,创建包含以下内容的metro.config.js
:
const exclusionList = require('metro-config/src/defaults/exclusionList');
// exclusionList is a function that takes an array of regexes and combines
// them with the default exclusions to return a single regex.
module.exports = {
resolver: {
blacklistRE: exclusionList([/dist\/.*/])
}
};
const blacklist = require('metro-config/src/defaults/blacklist');
// blacklist is a function that takes an array of regexes and combines
// them with the default blacklist to return a single regex.
module.exports = {
resolver: {
blacklistRE: blacklist([/dist\/.*/])
}
};
const blacklist = require('metro-config/src/defaults/blacklist');
// blacklist is a function that takes an array of regexes and combines
// them with the default blacklist to return a single regex.
module.exports = {
resolver: {
blacklistRE: blacklist([/dist\/.*/])
}
};
const blacklist = require('metro').createBlacklist;
module.exports = {
getBlacklistRE: function() {
return blacklist([/dist\/.*/]);
}
};
const blacklist = require('metro-bundler').createBlacklist;
module.exports = {
getBlacklistRE: function() {
return blacklist([/dist\/.*/]);
}
};
const blacklist = require('react-native/packager/blacklist');
module.exports = {
getBlacklistRE: function() {
return blacklist([/dist\/.*/]);
}
};
对于React Native>=0.59,<0.64
在项目根目录中,创建包含以下内容的metro.config.js
:
const exclusionList = require('metro-config/src/defaults/exclusionList');
// exclusionList is a function that takes an array of regexes and combines
// them with the default exclusions to return a single regex.
module.exports = {
resolver: {
blacklistRE: exclusionList([/dist\/.*/])
}
};
const blacklist = require('metro-config/src/defaults/blacklist');
// blacklist is a function that takes an array of regexes and combines
// them with the default blacklist to return a single regex.
module.exports = {
resolver: {
blacklistRE: blacklist([/dist\/.*/])
}
};
const blacklist = require('metro-config/src/defaults/blacklist');
// blacklist is a function that takes an array of regexes and combines
// them with the default blacklist to return a single regex.
module.exports = {
resolver: {
blacklistRE: blacklist([/dist\/.*/])
}
};
const blacklist = require('metro').createBlacklist;
module.exports = {
getBlacklistRE: function() {
return blacklist([/dist\/.*/]);
}
};
const blacklist = require('metro-bundler').createBlacklist;
module.exports = {
getBlacklistRE: function() {
return blacklist([/dist\/.*/]);
}
};
const blacklist = require('react-native/packager/blacklist');
module.exports = {
getBlacklistRE: function() {
return blacklist([/dist\/.*/]);
}
};
对于React Native>=0.57,<0.59
在项目根目录中创建rn cli.config.js
,内容如下:
const exclusionList = require('metro-config/src/defaults/exclusionList');
// exclusionList is a function that takes an array of regexes and combines
// them with the default exclusions to return a single regex.
module.exports = {
resolver: {
blacklistRE: exclusionList([/dist\/.*/])
}
};
const blacklist = require('metro-config/src/defaults/blacklist');
// blacklist is a function that takes an array of regexes and combines
// them with the default blacklist to return a single regex.
module.exports = {
resolver: {
blacklistRE: blacklist([/dist\/.*/])
}
};
const blacklist = require('metro-config/src/defaults/blacklist');
// blacklist is a function that takes an array of regexes and combines
// them with the default blacklist to return a single regex.
module.exports = {
resolver: {
blacklistRE: blacklist([/dist\/.*/])
}
};
const blacklist = require('metro').createBlacklist;
module.exports = {
getBlacklistRE: function() {
return blacklist([/dist\/.*/]);
}
};
const blacklist = require('metro-bundler').createBlacklist;
module.exports = {
getBlacklistRE: function() {
return blacklist([/dist\/.*/]);
}
};
const blacklist = require('react-native/packager/blacklist');
module.exports = {
getBlacklistRE: function() {
return blacklist([/dist\/.*/]);
}
};
对于React Native>=0.52,<0.57
在项目根目录中创建rn cli.config.js
,内容如下:
const exclusionList = require('metro-config/src/defaults/exclusionList');
// exclusionList is a function that takes an array of regexes and combines
// them with the default exclusions to return a single regex.
module.exports = {
resolver: {
blacklistRE: exclusionList([/dist\/.*/])
}
};
const blacklist = require('metro-config/src/defaults/blacklist');
// blacklist is a function that takes an array of regexes and combines
// them with the default blacklist to return a single regex.
module.exports = {
resolver: {
blacklistRE: blacklist([/dist\/.*/])
}
};
const blacklist = require('metro-config/src/defaults/blacklist');
// blacklist is a function that takes an array of regexes and combines
// them with the default blacklist to return a single regex.
module.exports = {
resolver: {
blacklistRE: blacklist([/dist\/.*/])
}
};
const blacklist = require('metro').createBlacklist;
module.exports = {
getBlacklistRE: function() {
return blacklist([/dist\/.*/]);
}
};
const blacklist = require('metro-bundler').createBlacklist;
module.exports = {
getBlacklistRE: function() {
return blacklist([/dist\/.*/]);
}
};
const blacklist = require('react-native/packager/blacklist');
module.exports = {
getBlacklistRE: function() {
return blacklist([/dist\/.*/]);
}
};
对于React Native>=0.46,<0.52
在项目根目录中创建rn cli.config.js
,内容如下:
const exclusionList = require('metro-config/src/defaults/exclusionList');
// exclusionList is a function that takes an array of regexes and combines
// them with the default exclusions to return a single regex.
module.exports = {
resolver: {
blacklistRE: exclusionList([/dist\/.*/])
}
};
const blacklist = require('metro-config/src/defaults/blacklist');
// blacklist is a function that takes an array of regexes and combines
// them with the default blacklist to return a single regex.
module.exports = {
resolver: {
blacklistRE: blacklist([/dist\/.*/])
}
};
const blacklist = require('metro-config/src/defaults/blacklist');
// blacklist is a function that takes an array of regexes and combines
// them with the default blacklist to return a single regex.
module.exports = {
resolver: {
blacklistRE: blacklist([/dist\/.*/])
}
};
const blacklist = require('metro').createBlacklist;
module.exports = {
getBlacklistRE: function() {
return blacklist([/dist\/.*/]);
}
};
const blacklist = require('metro-bundler').createBlacklist;
module.exports = {
getBlacklistRE: function() {
return blacklist([/dist\/.*/]);
}
};
const blacklist = require('react-native/packager/blacklist');
module.exports = {
getBlacklistRE: function() {
return blacklist([/dist\/.*/]);
}
};
用于反应本机<0.46
在项目根目录中创建rn cli.config.js
,内容如下:
const exclusionList = require('metro-config/src/defaults/exclusionList');
// exclusionList is a function that takes an array of regexes and combines
// them with the default exclusions to return a single regex.
module.exports = {
resolver: {
blacklistRE: exclusionList([/dist\/.*/])
}
};
const blacklist = require('metro-config/src/defaults/blacklist');
// blacklist is a function that takes an array of regexes and combines
// them with the default blacklist to return a single regex.
module.exports = {
resolver: {
blacklistRE: blacklist([/dist\/.*/])
}
};
const blacklist = require('metro-config/src/defaults/blacklist');
// blacklist is a function that takes an array of regexes and combines
// them with the default blacklist to return a single regex.
module.exports = {
resolver: {
blacklistRE: blacklist([/dist\/.*/])
}
};
const blacklist = require('metro').createBlacklist;
module.exports = {
getBlacklistRE: function() {
return blacklist([/dist\/.*/]);
}
};
const blacklist = require('metro-bundler').createBlacklist;
module.exports = {
getBlacklistRE: function() {
return blacklist([/dist\/.*/]);
}
};
const blacklist = require('react-native/packager/blacklist');
module.exports = {
getBlacklistRE: function() {
return blacklist([/dist\/.*/]);
}
};
所有版本<0.59
通过传递--config
选项,让CLI命令使用此配置:
react native run ios--config=rn cli.config.js
(配置文件应该由RN>=0.59自动拾取,因为它被重命名为metro.config.js
)
所有版本:关于缓存的注意事项
请注意,您的黑名单项目可能已经被打包机包含在缓存中,在这种情况下,第一次使用黑名单运行打包机时,您可能需要使用--reset cache
重置缓存,谢谢rob!对于我的情况,我所需要做的就是包含--reset cache
标志。现在看来我的rn cli.config.js
文件是自动使用的,所以我不需要--config=rn cli.config.js
。在成功通过packager步骤后,当应用程序首次尝试加载时,我仍然收到“未找到模块”错误。我将项目文件夹名称添加到黑名单正则表达式的开头,这似乎解决了这个问题。我想我需要确保打包程序不会忽略/node_modules//dist/之类的文件夹,这里没有说的是匹配被锚定到输入的末尾(数组中的正则表达式被构建到一个以$结尾的最终正则表达式中)。。。因此,请确保在要匹配的正则表达式末尾添加一个。*。另外,另一个有用的提示是,所有“/”正斜杠都会自动替换为当前操作系统路径分隔符
@EhteshChoudhury-谢谢,但是inlineRequires
不是这个答案所涵盖的选项。但是,在metro 0.60中,defaults
中导出的函数实际上已从blacklist
重命名为exclusionList
。我已经添加了一个关于RN 0.64+的部分,介绍了这一点。感谢您添加0.64更新。我已经测试过了,可以正常工作。您好,我刚刚在我的文章中看到了这篇文章,我使用的是0.59.8 react native版本,我有两个metro.config.js文件,一个在node module/metro下,另一个在node module/react native下,要更改哪一个?plz帮助在过去3天内解决问题