【发布时间】:2020-02-11 06:33:46
【问题描述】:
问题
create-react-app v2+ 支持开箱即用的 TypeScript 和 CSS 模块......分别。当您尝试将两者结合使用时,就会出现问题。 Facebook had an extensive discussion 关于这个问题并最终在 GitHub 上将其关闭。因此,开发人员必须使用 hack 和其他变通方法来让这两种技术与 CRA 一起很好地发挥作用。
现有解决方法:
您可以手动创建具有如下类型定义的ComponentName.module.css.d.ts 文件:export const identifierName: string。这允许您在导入 ComponentName.module.css 时利用 TypeScript 的键入和 VS Code 的自动完成功能。不幸的是,这非常乏味。
解决方案 (?):
Dropbox 的人们创建了typed-css-modules-webpack-plugin 来解决这个问题;它会为您自动生成那些*.d.ts 文件。他们展示了如何使用yarn 或npm 安装它,然后给出这个最小的代码示例:
const path = require('path');
const {TypedCssModulesPlugin} = require('typed-css-modules-webpack-plugin');
module.exports = {
entry: './src/index.ts',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
},
module: {
rules: [
{
test: /\.tsx?$/,
loader: 'ts-loader',
},
{
test: /\.css$/,
use: [
'style-loader',
// Use CSS Modules
{
loader: 'css-loader',
options: {
modules: true,
},
},
],
},
],
},
// Generate typing declarations for all CSS files under `src/` directory.
plugins: [
new TypedCssModulesPlugin({
globPattern: 'src/**/*.css',
}),
],
};
不幸的是,目前尚不清楚如何将其与create-react-app 一起使用。我对 Webpack 不是很了解,我使用customize-cra 来避免退出create-react-app,所以我可以为我需要的一些东西自定义 Webpack 配置。例如,Ant Design 允许您使用 babel-plugin-import 按需导入组件,详情如下:
https://ant.design/docs/react/use-in-typescript#Use-babel-plugin-import
问题:如何将上述 Webpack 配置代码转换为 customize-cra 等效项,这样我就不必退出 CRA?
【问题讨论】:
标签: reactjs typescript webpack create-react-app css-modules