LabelStudio 编辑器加载后,所有样式都没有生效:
LabelStudio 使用 CSS 模块 和 BEM 命名约定,所有的 CSS 类名都需要添加 lsf- 前缀。
CSS 模块处理:
.label 类名需要被转换为 .lsf-labelWebpack 配置:
web/webpack.config.js 有特殊的 CSS 模块配置.module.scss 的 SCSS 文件添加 lsf- 前缀我们的问题:
lq_label 应用的 webpack 配置没有这个处理lsf-label 类名.label 选择器在 web/apps/lq_label/webpack.config.js 中添加 CSS 模块配置,模仿根目录的配置:
const css_prefix = 'lsf-';
// 在 plugins 中添加
new webpack.DefinePlugin({
'process.env.CSS_PREFIX': JSON.stringify(css_prefix),
}),
// 配置 CSS 模块
config.module.rules.forEach((rule) => {
const testString = rule.test?.toString() || '';
const isScss = testString.includes('scss');
const isCssModule = testString.includes('.module');
if (rule.test?.toString().match(/scss|sass/) && !isCssModule) {
const r = rule.oneOf?.filter((r) => {
if (!r.use) return false;
const testString = r.test?.toString() || '';
if (testString.match(/module|raw|antd/)) return false;
return testString.match(/scss|sass/) && r.use.some((u) => u.loader && u.loader.includes('css-loader'));
});
r?.forEach((_r) => {
const cssLoader = _r.use.find((use) => use.loader && use.loader.includes('css-loader'));
if (!cssLoader) return;
const isSASS = _r.use.some((use) => use.loader && use.loader.match(/sass|scss/));
if (isSASS) _r.exclude = /node_modules/;
if (cssLoader.options) {
cssLoader.options.modules = {
localIdentName: `${css_prefix}[local]`, // 添加 lsf- 前缀
getLocalIdent(_ctx, _ident, className) {
if (className.includes('ant')) return className;
},
};
}
});
}
});
CSS_PREFIX 环境变量:
'lsf-'localIdentName 配置:
lsf-[local].label 转换为 .lsf-label排除规则:
.module.scss 文件(已经有自己的命名)node_modulesant 开头的类名(Ant Design 组件)打开浏览器开发者工具,检查一个标签按钮:
<div class="lsf-label lsf-label_selected">Positive</div>
在 Network 标签中找到 libs_editor_src_index_js.css,搜索:
.lsf-label {
/* 样式定义 */
}
重要:修改 webpack 配置后,必须重启开发服务器:
# 停止当前服务器 (Ctrl+C)
# 重新启动
cd web
yarn nx serve lq_label
web/webpack.config.js(第 18-110 行)web/libs/editor/如果样式还是不显示,检查:
浏览器缓存:
CSS 文件加载:
libs_editor_src_index_js.css 已加载类名匹配:
lsf- 开头lsf- 开头Webpack 配置:
css_prefix 变量定义正确这个问题的核心是 CSS 模块的类名转换。LabelStudio 依赖特定的 webpack 配置来正确处理 CSS 类名,我们需要在自己的应用中复制这个配置。
修复后,LabelStudio 编辑器应该完全正常工作,所有样式都会正确显示!