当前位置: 首页 > Web前端 > HTML

antd-theme-generator动态主题报错-nocorrespondingfile@{root-entry-name}.less

时间:2023-03-28 14:37:52 HTML

最近在开发项目的时候使用了最新的antd,发现将插件antd-theme-generator替换为动态主题提示错误:Error:ENOENT:nosuchfileordirectory,open'xxxxx/node_modules/antd/lib/style/themes/@{root-entry-name}.less'查看AntDesign官网也给出一个更新提示,在Dynamictheme(experimental):relatedchanges#为了实现CSSVariable并保持与原始用法的兼容性,我们添加了@root-entry-name:xxx;dist/antd.xxx.less文件中入口注入支持less动态加载对应的less文件。通常,您不需要关注此更改。但是,如果你的项目直接引用lib|es目录下的less文件。需要配置@root-entry-name:default;(或@root-entry-name:变量;)在less条目处,以便less可以找到正确的条目。此外,我们将@import'motion'和@import'reset'从lib|es/style/minxins/index.less迁移到lib|es/style/themes/xxx.less因为这两个文件依赖于主题相关的变量.如果使用相关内部方法,请自行调整。当然,我们还是建议直接使用dist目录下的antd.less文件,而不是调用内部文件,因为它们经常受到重构的影响。因为antd-theme-generator插件在没有更新到最新4.17.4版本的情况下并没有报错,但是最新的版本就是不能用,最后看了antd-theme的源码才发现问题-发电机。问题位置://antd-theme-generator->index.js458行://此处将所有变量打包到一个文件中,报错letantdLess=awaitbundle({src:antdStylesFile,});查找问题bundle的方法参考less-bundle-promise;最后定位到less-bundle-promise下的buildContents方法得到一个报错文件;//第21行:imported=line.replace(stringLiteralRegex,'$1');导入的less文件,后面的变量@{root-entry-name}没有被替换,或者是原来的引用,导致找不到文件;解决问题因为动态生成的主题不是生产依赖,所以可以改源码。这里我只是想解决项目问题,下面第21行直接判断代入变量。Replace@{root-entry-name}withdefault;//解决@{root-entry-name}报错的问题;//当然还有更好的正则替换或者其他方式,这里只是解决问题直接改if(imported==='./@{root-entry-name}.less'){imported='./default.less'}总结项目中升级依赖后,总会有一些兼容性问题,我们在线上没有解决做方案时,需要根据已有的报错信息查找原因。查源码也是必修课。希望能对朋友们提供帮助。(^-^)