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

时间:2018-01-07 23:29:17

标签: reactjs typescript webpack css-modules

尝试使用style-loader和css-loader添加css模块。很难搞清楚这一点。我也不确定是否需要责备或加载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,但这只会搞砸一切,使错误压倒性

1 个答案:

答案 0 :(得分:1)

因为这似乎不是一个受欢迎的问题,所以我设法找到了解决方案。希望这可以帮助任何与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,因此style 中将style-loader更改为webpack.config.js

    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或其他什么,它应该是好的(希望如此)。

快乐的编码!