AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 79551269
Accepted
Kevin Garcia
Kevin Garcia
Asked: 2025-04-03 01:59:14 +0800 CST2025-04-03 01:59:14 +0800 CST 2025-04-03 01:59:14 +0800 CST

TailwindCSS v4 com Sass

  • 772

Alguém conseguiu executar com sucesso o TailwindCSS 4 com Sass no aplicativo Webpack 5 e React?

Estou tendo alguns problemas de configuração em que não recebo nenhum erro de console, mas o processamento CSS parece estar em conflito no meu aplicativo a ponto de atrapalhar o roteamento.

Toda vez que vou para uma URL diferente, o aplicativo trava. Às vezes, se eu recarregar a página, ele pode renderizar todo o conteúdo. Mas, ao navegar para fora, o mesmo problema acontece: o aplicativo trava e diz "Desculpe, esta página não existe".

É bom ressaltar que esse problema começou a acontecer depois de introduzir o TailwindCSS 4 no aplicativo. O aplicativo nunca usou o Tailwind antes, apenas uma combinação de Material UI React + Reactstrap. Os estilos parecem se aplicar ao atualizar a página atual.

pacote.json

{
    "name": "my-app",
    "version": "1.0.0",
    "private": true,
    "scripts": {
        "start": "node server.js",
        "build-manager": "NODE_ENV=production APP_ENV=$npm_config_app_env node --max-old-space-size=13500 ./node_modules/webpack/bin/webpack.js --config ./apps/manager/webpack.prod.js",
        "server": "node server.js",
        "test": "jest --watch",
        "cypress": "npx cypress open"
    },
    "author": "",
    "license": "ISC",
    "devDependencies": {
        "@babel/core": "^7.25.8",
        "@babel/preset-env": "^7.25.8",
        "@babel/preset-typescript": "^7.25.7",
        "@eslint/eslintrc": "^3.1.0",
        "@eslint/js": "^9.13.0",
        "@sentry/webpack-plugin": "^2.22.6",
        "@testing-library/jest-dom": "^6.1.3",
        "@testing-library/react": "^15.0.7",
        "@testing-library/user-event": "^14.5.2",
        "@types/react": "~18.2.0",
        "@types/react-dom": "~18.2.0",
        "@types/react-redux": "^7.1.34",
        "autoprefixer": "^10.4.21",
        "babel-loader": "^9.2.1",
        "case-sensitive-paths-webpack-plugin": "^2.4.0",
        "clean-webpack-plugin": "^4.0.0",
        "copy-webpack-plugin": "^12.0.2",
        "css-loader": "^7.1.2",
        "cypress": "^13.15.0",
        "cypress-mailisk": "^2.0.1",
        "eslint": "^9.13.0",
        "eslint-plugin-react": "^7.37.1",
        "eslint-plugin-simple-import-sort": "^7.0.0",
        "express": "^4.21.1",
        "globals": "^15.11.0",
        "html-webpack-plugin": "^5.6.2",
        "husky": "^9.1.6",
        "jest-environment-jsdom": "^29.7.0",
        "lint-staged": "^15.2.10",
        "prettier": "^3.3.3",
        "redoc-cli": "^0.13.16",
        "sass": "^1.79.5",
        "sass-loader": "^16.0.2",
        "semantic-ui-react": "^2.1.5",
        "style-loader": "^4.0.0",
        "svg-inline-loader": "^0.8.2",
        "svg-url-loader": "^8.0.0",
        "terser-webpack-plugin": "^5.3.10",
        "webpack": "^5.95.0",
        "webpack-bundle-analyzer": "^4.10.2",
        "webpack-cli": "^5.1.4",
        "webpack-dev-middleware": "^7.4.2",
        "webpack-dev-server": "^5.1.0",
        "webpack-hot-middleware": "^2.26.1",
        "webpack-manifest-plugin": "^5.0.0",
        "webpack-merge": "^6.0.1"
    },
    "dependencies": {
        "@babel/eslint-parser": "^7.25.9",
        "@babel/plugin-proposal-class-properties": "^7.8.3",
        "@babel/runtime": "^7.25.7",
        "@babel/runtime-corejs2": "^7.25.7",
        "@devexpress/dx-react-core": "^4.0.8",
        "@devexpress/dx-react-scheduler": "^4.0.8",
        "@devexpress/dx-react-scheduler-material-ui": "^4.0.8",
        "@dnd-kit/core": "^6.1.0",
        "@dnd-kit/modifiers": "^7.0.0",
        "@dnd-kit/sortable": "^8.0.0",
        "@dnd-kit/utilities": "^3.2.2",
        "@floating-ui/react": "^0.27.0",
        "@gsap/react": "^2.1.1",
        "@hello-pangea/dnd": "^16.6.0",
        "@mui/icons-material": "^5.15.15",
        "@mui/lab": "^5.0.0-alpha.117",
        "@mui/material": "^5.15.15",
        "@mui/x-date-pickers": "^5.0.15",
        "@reduxjs/toolkit": "^2.3.0",
        "@sentry/react": "^8.37.1",
        "@tailwindcss/postcss": "^4.0.17",
        "@tanstack/react-query": "^5.59.15",
        "@tanstack/react-query-devtools": "^5.59.15",
        "@tanstack/react-virtual": "^3.10.8",
        "@tiptap/extension-placeholder": "^2.8.0",
        "@tiptap/pm": "^2.8.0",
        "@tiptap/react": "^2.8.0",
        "@tiptap/starter-kit": "^2.8.0",
        "@uidotdev/usehooks": "^2.4.1",
        "ace-builds": "^1.36.2",
        "ag-grid-community": "^33.0.3",
        "ag-grid-enterprise": "^33.0.3",
        "ag-grid-react": "^33.0.3",
        "array-move": "^2.2.0",
        "axios": "^1.7.7",
        "big.js": "^6.2.2",
        "bootstrap": "^4.6.0",
        "chart.js": "^4.4.5",
        "classnames": "^2.5.1",
        "crypto-browserify": "^3.12.0",
        "crypto-es": "^2.1.0",
        "debounce-promise": "^3.1.2",
        "dompurify": "^3.1.7",
        "dotenv-webpack": "^8.1.0",
        "formik": "^2.4.6",
        "fslightbox-react": "^1.7.6",
        "gsap": "^3.12.5",
        "html-react-parser": "^5.1.18",
        "immutability-helper": "^3.1.1",
        "invariant": "^2.2.4",
        "jsoncrush": "^1.1.6",
        "large-small-dynamic-viewport-units-polyfill": "^0.1.1",
        "libphonenumber-js": "^1.11.11",
        "lodash.clonedeep": "^4.5.0",
        "lodash.flattendeep": "^4.4.0",
        "lodash.isequal": "^4.5.0",
        "lodash.topath": "^4.5.2",
        "mapbox-gl": "^3.7.0",
        "microsoft-cognitiveservices-speech-sdk": "^1.41.0",
        "mini-css-extract-plugin": "^2.9.2",
        "moment": "^2.30.1",
        "moment-timezone": "^0.5.23",
        "mui-image": "^1.0.7",
        "mui-nested-menu": "^3.4.0",
        "natural-orderby": "^2.0.3",
        "npm": "^10.9.0",
        "postcss": "^8.5.3",
        "postcss-loader": "^8.1.1",
        "postcss-preset-env": "^10.1.5",
        "promise-polyfill": "8.3.0",
        "promise.allsettled": "^1.0.7",
        "query-string": "^9.1.1",
        "react": "~18.2.0",
        "react-ace": "^12.0.0",
        "react-bottom-scroll-listener": "^5.1.0",
        "react-chartjs-2": "^5.2.0",
        "react-content-loader": "^7.0.2",
        "react-datepicker": "^7.5.0",
        "react-dom": "~18.2.0",
        "react-draggable": "^4.4.6",
        "react-dropzone": "^14.2.9",
        "react-froala-wysiwyg": "4.3.0",
        "react-google-places-autocomplete": "^4.1.0",
        "react-google-recaptcha": "^3.1.0",
        "react-grid-layout": "^1.5.0",
        "react-intersection-observer": "^9.13.1",
        "react-loadable": "^5.5.0",
        "react-map-gl": "^7.1.7",
        "react-markdown": "^9.0.3",
        "react-moment": "^1.1.3",
        "react-number-format": "^5.4.2",
        "react-payment-inputs": "^1.2.0",
        "react-pdf": "^9.1.1",
        "react-phone-number-input": "^3.4.8",
        "react-plaid-link": "^3.6.0",
        "react-qr-code": "^2.0.15",
        "react-quill": "^2.0.0",
        "react-redux": "^9.1.2",
        "react-router-dom": "^5.1.2",
        "react-scripts": "^5.0.1",
        "react-select": "^5.8.1",
        "react-speech-recognition": "^3.10.0",
        "react-spinners": "^0.15.0",
        "react-toastify": "^10.0.6",
        "react-toggle": "^4.0.2",
        "react-virtuoso": "^4.12.0",
        "react-zoom-pan-pinch": "^3.6.1",
        "reactstrap": "^8.10.1",
        "redux": "^5.0.1",
        "redux-first-history": "^5.2.0",
        "redux-thunk": "^3.1.0",
        "regenerator-runtime": "^0.14.1",
        "stream-browserify": "^3.0.0",
        "styled-components": "^6.1.13",
        "tailwindcss": "^4.0.17",
        "textarea-caret": "^3.1.0",
        "web-speech-cognitive-services": "^7.1.3",
        "yup": "^1.4.0"
    }
}

postcss.config.js

module.exports = {
    plugins: {
        '@tailwindcss/postcss': {}
    }
};

vento de cauda.css

@import '@rentvine/trellis/variables';
@import 'tailwindcss';
@import '@rentvine/trellis/config';

webpack.common.js

const path = require('path');
const webpack = require('webpack');
const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const { WebpackManifestPlugin } = require('webpack-manifest-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');

const Dotenv = require('dotenv-webpack');

const { getAppConfig } = require('./../../rv-build-config');
const appConfig = getAppConfig('manager', process.env.APP_ENV);

module.exports = {
    devtool: 'source-map',
    entry: {
        app: path.resolve(__dirname, './src/index.js')
    },
    output: {
        filename: '[name].bundle.[fullhash].js',
        chunkFilename: '[name].bundle.[fullhash].js',
        path: path.resolve(__dirname, './../../bin/manager-app'),
        publicPath: '/'
    },
    resolve: {
        alias: {
            '~': path.resolve(__dirname, 'src'),
            Lib: path.resolve(__dirname, '../../lib/node/src'),
            ROOT: path.resolve(__dirname, '../../')
        },
        modules: ['../node_modules/froala-editor/js', 'node_modules'],
        fallback: {
            crypto: require.resolve('crypto-browserify'),
            stream: require.resolve('stream-browserify')
        },
        extensions: ['.ts', '.js'],
        symlinks: false
    },
    plugins: [
        // Load shared environment variables (stored in .env)
        new Dotenv(),
        new CleanWebpackPlugin(),
        new HtmlWebpackPlugin({
            title: 'Rentvine',
            template: path.resolve(__dirname, './src/index.html')
        }),
        new WebpackManifestPlugin(),
        new webpack.DefinePlugin({
            ...appConfig,
            'process.env.PORTAL_TYPE_ID': JSON.stringify(1),
            'process.env.API_ROOT': JSON.stringify('/api/manager/'),
            'process.env.LOGIN_URL': JSON.stringify('session_manager_LoginUrl')
        }),
        new CopyWebpackPlugin({
            patterns: [
                {
                    from: path.resolve(__dirname, './src/assets'),
                    to: 'assets'
                },
                {
                    // move main favicon to root so non-html documents show it ( pdf, img, etc)
                    from: path.resolve(__dirname, './src/assets/favicon/favicon.ico'),
                    to: 'favicon.ico'
                }
            ]
        }),
        new webpack.ProvidePlugin({
            FroalaEditor: 'file_name'
        }),
        new CaseSensitivePathsPlugin()
    ],
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                include: [path.resolve(__dirname, 'src'), path.resolve(__dirname, './../../lib/node/src')],
                use: 'babel-loader'
            },
            {
                test: /\.ts?/,
                exclude: /node_modules/,
                include: [path.resolve(__dirname, 'src'), path.resolve(__dirname, './../../lib/node/src')],
                use: 'babel-loader'
            },
            {
                test: /\.m?js$/,
                exclude: /(node_modules|bower_components)/,
                include: path.resolve(__dirname, 'src'),
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['@babel/preset-env']
                    }
                }
            },
            {
                test: /\.css$/,
                use: ['style-loader', 'css-loader', 'postcss-loader']
            },
            {
                test: /\.scss$/,
                use: [
                    'style-loader', // creates style nodes from JS strings
                    { loader: 'css-loader', options: { url: false } }, // translates CSS into CommonJS
                    {
                        // compiles Sass to CSS
                        loader: 'sass-loader',
                        options: {
                            sassOptions: {
                                // TODO: these should only be temporary until we have time to fix issues
                                quietDeps: true,
                                silenceDeprecations: ['color-functions', 'global-builtin', 'import']
                            }
                        }
                    }
                ]
            },
            {
                test: /\.(png|svg|jpg|gif)$/,
                type: 'asset/resource'
            },
            {
                test: /\.(woff|woff2|eot|ttf|otf)$/,
                type: 'asset/resource'
            },
            {
                test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
                mimetype: 'application/font-woff',
                type: 'asset'
            },
            {
                test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/,
                mimetype: 'application/font-woff',
                type: 'asset'
            },
            {
                test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
                mimetype: 'application/octet-stream',
                type: 'asset'
            },
            {
                test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
                type: 'asset/resource'
            }
        ]
    }
};
reactjs
  • 1 1 respostas
  • 41 Views

1 respostas

  • Voted
  1. Best Answer
    rozsazoltan
    2025-04-03T04:02:50+08:002025-04-03T04:02:50+08:00

    TailwindCSS v4 não suporta mais pré-processadores Sass, Less e Stylus. Você está usando Sass, e é por isso que ele não está funcionando.

    Você pode usar o TailwindCSS v3 com uma instalação específica da versão ou remover o Sass.

    npm install -D tailwindcss@3
    

    Obsoleto: suporte a pré-processadores

    Sass, Less e Stylus

    O Tailwind CSS v4.0 é uma ferramenta de criação de CSS completa, projetada para um fluxo de trabalho específico e não foi projetada para ser usada com pré-processadores CSS como Sass, Less ou Stylus.

    Pense no Tailwind CSS como seu pré-processador — você não deve usar o Tailwind com o Sass pelo mesmo motivo que não usaria o Sass com o Stylus.

    Como o Tailwind foi projetado para navegadores modernos, você não precisa de um pré-processador para coisas como aninhamento ou variáveis, e o próprio Tailwind fará coisas como agrupar suas importações e adicionar prefixos de fornecedores.

    • Compatibilidade - TailwindCSS v4 Docs

    Para mais detalhes:

    • Quais são as mudanças significativas do TailwindCSS v4? - StacKOverflow
    • Obsoleto: suporte a pré-processadores Sass, Less e Stylus - StacKOverflow
    • tailwindlabs/tailwindcss#15716 por Robin Malfait:
      A ferramenta de migração não reconhece arquivos .scss
      - GitHub
    • tailwindlabs/tailwindcss#16793 por Philipp Spiess:
      TailwindCSS v4 por que ignora arquivos .scss
      - GitHub
    • 0

relate perguntas

  • Dividindo o tempo exato do campo createdAt do MongoDB

  • Como mostrar o tempo relativo no projeto react.js

  • Como contextualizar um genérico, mas usar o contexto sem passar no genérico?

  • Eu preciso dinamicamente React.createElement usando useState

  • O valor React Context não é atualizado em useEffect

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve