使用https://github.com/kristerkari/react-native-svg-transformer
在这个包中提到 .svg 文件在 React Native v0.57 及更低版本中不受支持,因此请为 svg 文件使用 .svgx 扩展名。
对于 web 或 react-native-web 使用 https://www.npmjs.com/package/@svgr/webpack
要使用 react-native-svg-uri 和 react-native 0.57 及更低版本渲染 svg 文件,您需要将以下文件添加到您的根项目中
注意:将扩展名svg 更改为svgx
第 1 步:将文件 transformer.js 添加到项目的根目录
// file: transformer.js
const cleanupSvg = require('./cleanup-svg');
const upstreamTransformer = require("metro/src/transformer");
// const typescriptTransformer = require("react-native-typescript-transformer");
// const typescriptExtensions = ["ts", "tsx"];
const svgExtensions = ["svgx"]
// function cleanUpSvg(text) {
// text = text.replace(/width="([#0-9]+)px"/gi, "");
// text = text.replace(/height="([#0-9]+)px"/gi, "");
// return text;
// }
function fixRenderingBugs(content) {
// content = cleanUpSvg(content); // cleanupSvg removes width and height attributes from svg
return "module.exports = `" + content + "`";
}
module.exports.transform = function ({ src, filename, options }) {
// if (typescriptExtensions.some(ext => filename.endsWith("." + ext))) {
// return typescriptTransformer.transform({ src, filename, options })
// }
if (svgExtensions.some(ext => filename.endsWith("." + ext))) {
return upstreamTransformer.transform({
src: fixRenderingBugs(src),
filename,
options
})
}
return upstreamTransformer.transform({ src, filename, options });
}
第 2 步:将 rn-cli.config.js 添加到项目的根目录
module.exports = {
getTransformModulePath() {
return require.resolve("./transformer");
},
getSourceExts() {
return [/* "ts", "tsx", */ "svgx"];
}
};
上述解决方案也适用于生产应用程序✅