ReactJS / Styled-Components: problemas de compatibilidad CSS en diferentes navegadores
Actualmente estamos teniendo problemas de compatibilidad CSS en varios navegadores con un sitio web construido con React y Linaria. Linaria es esencialmente una biblioteca de styled-components que tiene su CSS-in-JS extraído en un archivo CSS durante el paso de construcción.
Creo que la solución es utilizar PostCSS. Sin embargo, como soy nuevo en esta herramienta, estoy tratando de averiguar cómo integrarla adecuadamente en mi configuración de webpack. Especialmente para asegurarme de que se ejecute después de que se hayan extraído los estilos de linaria.
Las dos preguntas son:
- ¿Es correcto mi archivo de configuración
postcss.config.js
, ya que no estoy seguro si debo usar tantoautoprefixer
comopostcss-preset-env
? Además, ¿es correcto mi archivo.browserslistrc
para apuntar a las versiones más recientes de Safari, Edge, Chrome y Firefox? - ¿Es correcta mi configuración
webpack.config.ts
para asegurarme de que se ejecute postcss en mi CSS extraído de linaria styled-components?
Ver los archivos de configuración pertinentes a continuación.
Gracias.
webpack.config.ts
const configuration = (env: Record<string, any>, argv: Record<string, any>): Configuration => ({
entry: getEntries,
output: {
path: path.resolve(<em>_dirname, "assets"),
filename: "[name].js",
},
plugins: [
new MiniCssExtractPlugin({
filename: "main.css",
})
],
optimization: {
splitChunks: {
cacheGroups: {
styles: {
name: "styles",
type: "css/mini-extract",
chunks: "all",
enforce: true,
},
},
},
},
module: {
rules: [
{
test: /.tsx?$/i,
exclude: /node</em>modules/,
use: [
"babel-loader",
"@linaria/webpack-loader",
],
},
{
test: /.css$/i,
use: [
MiniCssExtractPlugin.loader,
{
loader: "css-loader",
options: {
importLoaders: 1,
}
},
"postcss-loader",
],
},
],
},
resolve: {
extensions: [".tsx", ".ts", "..."],
},
});
export default configuration;
postcss.config.js
module.exports = {
plugins: [
require("autoprefixer"),
require("postcss-preset-env"),
]
};
.browerslistrc
last 4 versions
davy.ai
Solución del experto en IT para problemas de compatibilidad de CSS usando react y linaria
Como experto en ReactJS y IT especializado en webpack, styled-components, postcss y postcss-loader, creo firmemente que la solución a los problemas de compatibilidad de CSS en navegadores con un sitio construido usando React y Linaria es usar PostCSS. Sin embargo, como principiante en el uso de esta herramienta, todavía estoy descubriendo cómo integrarla correctamente en mi configuración de webpack para asegurarme de que se ejecute después de que se hayan extraído los estilos de linaria.
Preguntas
Tengo dos preguntas que requieren respuestas y posibles modificaciones en mis archivos
postcss.config.js
ywebpack.config.ts
:postcss.config.js
? No estoy seguro si debo usar tantoautoprefixer
comopostcss-preset-env
. Además, ¿es correcta la configuración de mi archivo.browserslistrc
para apuntar a las versiones más recientes de Safari, Edge, Chrome y Firefox?¿Es correcta la configuración de mi archivo
webpack.config.ts
para asegurar que PostCSS se ejecute en el CSS extraído de linaria styled-components?Archivos de configuración
Consulte los archivos de configuración relevantes a continuación:
webpack.config.ts
postcss.config.js
.browserslistrc
Respuestas
.browserslistrc
para apuntar a las últimas versiones no solo de Safari, Edge, Chrome y Firefox, sino también de otros navegadores comúnmente utilizados como Internet Explorer. La modificación del archivo para incluir otros navegadores en la lista garantizará que el sitio web funcionará sin problemas para todos los usuarios, independientemente de sus preferencias. Un ejemplo de esta configuración podría ser:En cuanto al archivo
postcss.config.js
, el uso de ambos complementosautoprefixer
ypostcss-preset-env
es correcto ya queautoprefixer
agrega automáticamente prefijos de proveedores para cualquier propiedad de CSS necesaria mientras quepostcss-preset-env
es un complemento que nos permite usar la sintaxis actual de CSS sin preocuparnos por los problemas de compatibilidad del navegador. Una sugerencia que haría es actualizar la versión deautoprefixer
ya que las versiones antiguas pueden no funcionar según lo esperado para ciertas propiedades de CSS.webpack.config.ts
, sugiero modificar la regla delmódulo
para archivos.css
a:El cambio más significativo de la configuración existente es definir el objeto
postcssOptions
en lasopciones
delpostcss-loader
. Este objeto permite que la configuración cargue correctamente los complementos mencionados enpostcss.config.js
sin errores.</string,></string,>