reactjs - ts-loader/css-loader 无法导入/解析文件

标签 reactjs typescript webpack css-modules

尝试使用 style-loader 和 css-loader 添加 css 模块。很难弄清楚这一点。我也不确定是 ts-loader 还是 css-loader 的问题。

webpack.config.js

const path = require('path');

module.exports = env => {
    return {
        devtool: "inline-source-map",
        entry: "./src/index.tsx",
        output: {
            path: path.resolve(__dirname, "/public"),
            filename: "build/app.js"
        },
        resolve: {
            extensions: [".ts", ".tsx", ".js", ".json"],
        },
        module: {
            rules: [
                {
                    test: /\.tsx?$/,
                    loader: "ts-loader",
                },
                {
                    test: /\.css$/,
                    loader: 'style!css-loader?modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]' 
                  }
            ]
        }
    }
}

组件

import styles from "./Main.css"; // TS2307: Cannot find module './Main.css'.


附:我尝试使用 extract-text-webpack-plugin,但这只会让一切变得更加困惑,使错误变得势不可挡

最佳答案

因此,由于这似乎不是一个常见问题,我设法找到了解决方案。希望这能帮助那些在 ts-loader + css-loader 中遇到困难的人。

1) 添加处理 .css 扩展名的 .d.ts 文件

// I put it in root, but could be anywhere
// <root>/defs.d.ts
declare module "*.css" {
    var styles: { [key: string]: string };
    export = styles
}

2) 由于我使用的是 Webpack 3.x,因此将 webpack.config.js 中的 style 更改为 style-loader

    module: {
        rules: [
            //...
            {
                test: /\.css$/,
                loader: 'style-loader!css-loader?modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]' 
            }
        ]
    }

3) 在组件文件中将样式导入为 *

// In Main.tsx
import * as styles from "./Main.css";

// Usage
<div className={styles.nameOfClass} />

4) 在tsconfig.json中将.d.ts文件添加到include部分。就我而言,它...

"include": [
    "src",
    "./defs.d.ts"
],

重新启动 webpack-dev-server 或其他任何东西,应该就可以了(希望如此)。

祝你编码愉快!

关于reactjs - ts-loader/css-loader 无法导入/解析文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48142521/

相关文章:

reactjs - 使用 Next.js 和 Vercel 隐藏 api key 的最简单方法?

css - 在 react 中使用类名

javascript - 如何将react组件转换为html字符串?

typescript - Redux + typescript : Types of parameters 'action' and 'action' are incompatible

javascript - 无法获取 Vue 状态的元素 (Vue.js/JS/TS)

javascript - 如何使 Material-UI Table 保持动态高度的可滚动性?

typescript - Angular2 - Iterable Differ 不检测变化

javascript - Angular 2,在表单中设置文本输入的值

asp.net - 使用 html-webpack-plugin 将捆绑脚本标签注入(inject)带有母版页的 <asp :Content> tag in legacy . aspx 文件中?

webpack - 在与 webpack-dev-server 相同的端口上提供任意资源