在Webpack 5中使用Tailwind

wf82jlnq  于 2023-06-06  发布在  Webpack
关注(0)|答案(1)|浏览(233)

我当前的Webpack 5设置包括以下CSS和SCSS文件规则:

test: /\.s?css$/,
use: [
    { loader: MiniCssExtractPlugin.loader },
    { loader: 'css-loader', options: { importLoaders: 1 } },
    {
        loader: 'postcss-loader',
        plugins: [
            tailwindcss
        ]
    },
    'sass-loader'
],

目标是:

  • 编译scss
  • 过程顺风
  • 加载CSS
  • 将css分离到文件

我的scss文件包含:

@tailwind base;
@tailwind components;
@tailwind utilities;

但我得到以下错误:
无法加载“C:\dev\project\webpack.config.js”配置
lum[i] =(chan <= 0.039_28)?chan / 12.92:((chan + 0.055)/ 1.055)**2.4;
语法错误:无效或意外的令牌

相关备注:如果我删除postcss-loader,它会编译,但当然tailwind不会包含在CSS文件中。

我该如何解决这个问题?

cngwdvgl

cngwdvgl1#

对于像SASS这样的顺风预处理器,@tailwind将不起作用。您必须使用@import "tailwindcss/"。例如@import "tailwindcss/base"
现在跳转到webpack配置:

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const WorkboxWebpackPlugin = require("workbox-webpack-plugin");
const { VueLoaderPlugin } = require('vue-loader')
const isProduction = process.env.NODE_ENV == "production";
const stylesHandler = MiniCssExtractPlugin.loader;

const config = {
  entry: "./src/index.js",
  output: {
    path: path.resolve(__dirname, "dist"),
  },
  plugins: [
    new HtmlWebpackPlugin({
      // template: "index.html",
      template: path.resolve(__dirname, 'public/index.html')
    }),

    new MiniCssExtractPlugin(),
    new VueLoaderPlugin(),

    // Add your plugins here
    // Learn more about plugins from https://webpack.js.org/configuration/plugins/
  ],
  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader'
      },
      {
        test: /\.(js|jsx)$/i,
        loader: "babel-loader",
      },
      {
        test: /\.s[ac]ss$/i,
        use: [
          stylesHandler,
          "css-loader",
          "postcss-loader",
          "sass-loader"
        ],
      },
      {
        test: /\.css$/i,
        use: [stylesHandler, "css-loader", "postcss-loader"],
      },
      {
        test: /\.(eot|svg|ttf|woff|woff2|png|jpg|gif)$/i,
        type: "asset",
      },

      // Add your rules for custom modules here
      // Learn more about loaders from https://webpack.js.org/loaders/
    ],
  },
};

module.exports = () => {
  if (isProduction) {
    config.mode = "production";

    config.plugins.push(new WorkboxWebpackPlugin.GenerateSW());
  } else {
    config.mode = "development";
  }
  return config;
};

如果你不使用VueJ,你可以忽略vue规则。下面是我使用的devDependencies:

"@babel/core": "^7.17.7",
    "@babel/preset-env": "^7.16.11",
    "@webpack-cli/generators": "^2.4.2",
    "autoprefixer": "^10.4.4",
    "babel-loader": "^8.2.3",
    "css-loader": "^6.7.1",
    "html-webpack-plugin": "^5.5.0",
    "mini-css-extract-plugin": "^2.6.0",
    "postcss": "^8.4.12",
    "postcss-loader": "^6.2.1",
    "sass": "^1.49.9",
    "sass-loader": "^12.6.0",
    "style-loader": "^3.3.1",
    "tailwindcss": "^3.0.23",
    "vue-loader": "^17.0.0",
    "vue-template-compiler": "^2.6.14",
    "webpack": "^5.70.0",
    "webpack-cli": "^4.9.2",
    "workbox-webpack-plugin": "^6.5.1"

不要忘记像这样配置postCSS:

module.exports = {
  plugins: [
    require('tailwindcss'),
    require('./tailwind.config.js'),
    require('autoprefixer')
  ],
};

现在将scss文件导入到main.js或index.js。对于分离CSS,您可以遵循这篇文章:https://survivejs.com/webpack/styling/separating-css/
好好享受

相关问题