reactjs - ts-loader/css-loader no puede importar/resolver archivo
Intentando agregar módulos CSS usando style-loader y css-loader. Me está costando mucho entender esto. También no estoy seguro si la culpa es de ts-loader o de 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]'
}
]
}
}
}
componente
import styles from "./Main.css"; // TS2307: Cannot find module './Main.css'.
P.D. Intenté usar el extract-text-webpack-plugin, pero eso solo empeoró todo aún más, haciendo que los errores fueran abrumadores
Respuesta #1
Así que, dado que esto no parece ser un problema popular, logré encontrar la solución. Espero que esto ayude a cualquiera que tenga problemas con ts-loader + css-loader.
1) Agregar un archivo .d.ts que maneje extensiones .css
// I put it in root, but could be anywhere
// <root>/defs.d.ts
declare module "*.css" {
var styles: { [key: string]: string };
export = styles
}
2) Dado que uso Webpack 3.x, cambie style a style-loader en webpack.config.js
module: {
rules: [
//...
{
test: /\.css$/,
loader: 'style-loader!css-loader?modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]'
}
]
}
3) Importa estilos como * en el archivo del componente
// In Main.tsx
import * as styles from "./Main.css";
// Usage
<div className={styles.nameOfClass} />
4) En tsconfig.json agrega el archivo .d.ts a la parte de include. En mi caso es...
"include": [
"src",
"./defs.d.ts"
],
Reinicia webpack-dev-server o lo que sea y debería estar listo para funcionar (con suerte).
¡Feliz programación!
