React18TS项目:配置react-css-modules,使用styleName

他的好处不说了

网上一堆文章一个能打的都没有,

添加开发依赖

复制代码
pnpm add -D @dr.pogodin/babel-plugin-react-css-modules @types/react-css-modules  

Babel Plugin "React CSS Modules" | Dr. Pogodin Studio

看@dr.pogodin/babel-plugin-react-css-modules官方文档

不使用babel-plugin-react-css-modules

手搭webpack配置需要处理

1.能启用css modules

对于裸 Webpack,请参见webpack css-loader的 modules 的选项 链接

2.配置@dr.pogodin/babel-plugin-react-css-modules

使用

  • 将此插件作为直接依赖项安装(在不允许编译时 styleName 解析的边缘情况下,插件会回退到运行时解析)。

    npm install --save @dr.pogodin/babel-plugin-react-css-modules

  • Install Webpack at least as a dev dependency:
    至少将 Webpack 作为开发依赖项安装 Webpack:

    npm install --save-dev webpack

  • Add the plugin to Babel configuration:
    将插件添加到 Babel 配置中:

    {
    "plugins": [
    ["@dr.pogodin/react-css-modules", {
    // The default localIdentName in "css-loader" is "[hash:base64]",
    // it is highly-recommended to explicitly specify the same value
    // both here, and in "css-loader" options, including the hash length
    // (the last digit in the template below).
    "generateScopedName": "[hash:base64:6]"

    复制代码
        // See below for all valid options.
      }]
    ]

    }

我自己项目手写的webpack.base.js中使用

复制代码
const CSS_MODULE_LOCAL_IDENT_NAME = '[name]__[local]___[hash:base64:5]';


{
	test: /.(jsx?)|(tsx?)$/,
		exclude: /node_modules/,
		use: [
		{
			loader: 'babel-loader',
			options: {
				presets: ['@babel/preset-env', '@babel/preset-react', '@babel/preset-typescript'],
				plugins: [
					[
						'@dr.pogodin/react-css-modules',
						{
							generateScopedName: CSS_MODULE_LOCAL_IDENT_NAME,
							autoResolveMultipleImports: true, // 允许多个匿名导入
							webpackHotModuleReloading: true, // 启用热模块重新加载代码的注入
							handleMissingStyleName: 'throw', // 确定应为未定义的 CSS 模块执行的操作
							filetypes: {
								'.less': {
									syntax: 'postcss-less',
								},
							},
						},
					],
				],
			},
		},
	],
},
{
	test: /\.less$/,
	use: [
		'style-loader',
		{
			loader: 'css-loader',
			options: {
				modules: {
					localIdentName: CSS_MODULE_LOCAL_IDENT_NAME,
					auto: resourcePath => resourcePath.endsWith('.module.less'),
				},
			},
		},
		{
			loader: 'postcss-loader',
			options: {
				postcssOptions: {
					plugins: [['postcss-preset-env', {}]],
				},
			},
		},
		{
			loader: 'less-loader',
			options: {
				lessOptions: {
					javascriptEnabled: true,
				},
			},
		},
	],
	// 排除 node_modules 目录
	exclude: /node_modules/,
},

3.TS项目不能直接在jsx中使用styleName,会报错,

需要引入@types/react-css-modules

就可以使用module.less和styleName了

项目中使用

index.module.less

复制代码
.adminColor {
	color: aquamarine;
	background-color: black;
}

index.tsx

复制代码
import React from 'react';
import './index.module.less';

const Dashboard: React.FC = () => {
	return (
		<>
			<h2 styleName="adminColor">我的</h2>
		<div styleName="adminColor">我的</div>
		</>
	);
};
export default Dashboard;

效果

样式编码

相关推荐
二十雨辰23 分钟前
歌词滚动效果
前端·css
法医25 分钟前
和文心快码做朋友,让编程像“说话”一样简单
前端·文心快码
前端小巷子28 分钟前
JS 打造「放大镜 + 缩略图」一体组件
前端·javascript·面试
陈随易29 分钟前
适合中国宝宝的AI编程神器,文心快码
前端·后端·node.js
知识分享小能手33 分钟前
React学习教程,从入门到精通,React AJAX 语法知识点与案例详解(18)
前端·javascript·vue.js·学习·react.js·ajax·vue3
UrbanJazzerati1 小时前
掌握 DOM 的基础属性与方法:从操作元素到构建动态效果
前端·面试
hashiqimiya1 小时前
html实现右上角有个图标,鼠标移动到该位置出现手型,点击会弹出登录窗口。
前端·html
古夕1 小时前
前端文件下载的三种方式:a标签、Blob、ArrayBuffer
前端·javascript·vue.js
纯真时光1 小时前
Vue3中pinia状态管理库的使用(Composition API 风格)
前端
万少2 小时前
可可图片编辑 HarmonyOS(5)滤镜效果
前端