【问题标题】:Laravel-mix with browserSync, and tailwindCss causes infinite reloading bugLaravel-mix with browserSync,tailwindCss 导致无限重载bug
【发布时间】:2022-02-16 23:44:33
【问题描述】:

在我最新的项目中,我使用 laravel-mix 和内置的 browserSync,并且我已经将 tailwindCss 添加为一个包。

这是webpack.mix.js 文件:

const mix = require("laravel-mix");
require('mix-html-builder');

mix
    .setResourceRoot("../")
    .setPublicPath("public/assets")
    .browserSync({
        proxy: 'xxx',
        host: 'xxx',
        files: "public/*",
        open: false,
        reloadOnRestart: true
    })
    .html({
        htmlRoot: './resources/html/pages/*.html',
        partialRoot: './resources/html/components',
        output: '..'
    })
    .copy("resources/images", "public/assets/images")
    .js("resources/js/app.js", "js")
    .postCss(
        "resources/css/app.css",
        "css",
        [
            require("postcss-import"),
            require("tailwindcss/nesting"),
            require("tailwindcss"),
            require("autoprefixer")
        ]
    )

只要我注释掉require("tailwindcss") 行或.html({}) 块,watch 命令npm run watch 运行良好,如果它们都打开,mix 命令将无限循环运行(在终端)。没有错误,一切都在运行,它不会再停止运行了:D

我的package.json如下:

{
    "name": "xxx",
    "version": "1.0.0",
    "description": "## Deployment",
    "main": "index.js",
    "scripts": {
        "dev": "npm run development",
        "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --config=node_modules/laravel-mix/setup/webpack.config.js",
        "watch": "npm run development -- --watch",
        "prod": "npm run production",
        "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --config=node_modules/laravel-mix/setup/webpack.config.js"
    },
    "repository": {
        "type": "git",
        "url": "xxx"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "devDependencies": {
        "@typescript-eslint/eslint-plugin": "^5.11.0",
        "@typescript-eslint/parser": "^5.11.0",
        "alpinejs": "^3.8.1",
        "autoprefixer": "^10.4.2",
        "browser-sync": "^2.27.7",
        "browser-sync-webpack-plugin": "^2.3.0",
        "eslint": "^8.9.0",
        "eslint-plugin-import": "^2.25.4",
        "eslint-plugin-node": "^11.1.0",
        "filename-regex": "^2.0.1",
        "laravel-mix": "^6.0.41",
        "mix-html-builder": "^0.8.0",
        "postcss": "^8.4.6",
        "postcss-import": "^14.0.2",
        "stylelint": "^14.4.0",
        "stylelint-config-standard": "^25.0.0",
        "stylelint-order": "^5.0.0",
        "tailwindcss": "^3.0.19"
    }
}

我想我可能在某处遗漏了一个简单的设置,有人可以指出这可能出错的地方吗?


这种特殊情况的解决方案:

这是我的 tailwind.config.js 文件,@reid-gannah 发布了他们的答案。起初我的内容配置指向管道的末端,由于项目最初是如何设置的,因此引发了无限装载错误。在更改文件结构(并实现mix-html-builder)之后,我从未意识到 Tailwind 仍然从生成的文件而不是源文件中读取。所以,下面的配置解决了我的问题:

module.exports = {
    mode: "jit",
    content: [
        './resources/html/pages/**/*.{html,js}',
        './resources/html/components/**/*.{html,js}',
        './resources/html/layouts/**/*.{html,js}',
    ],
    theme: {
        container: {
        },
        extend: {}
    },
    variants: {
        extend: {}
    },
};

【问题讨论】:

  • 哇,我从来没有发现过这么新鲜的问题。我正在遇到/解决这个完全相同的问题。您的 tailwing.config.js 文件是什么样的?我发现的唯一一件事是搞乱content 路径/全局模式似乎会影响它。我可以在子目录中有 tailwind “watch” *.php 文件,但在与实际 tailwind.config.js 文件相同的目录中没有。

标签: tailwind-css laravel-mix


【解决方案1】:

啊,我想我发现了这里发生了什么。看起来这是 Tailwind 自己记录的 Webpack 的一个已知问题:

如果您的 CSS 似乎在无限循环中重新构建,则很有可能是因为您的构建工具在注册 PostCSS 依赖项时不支持 glob 选项。

许多构建工具(例如 webpack)不支持此选项,因此我们只能告诉它们查看特定文件或整个目录。例如,我们不能告诉 webpack 只查看目录中的 *.html 文件。

这意味着如果构建 CSS 导致这些目录中的任何文件发生更改,则会触发重建,即使更改的文件与 glob 中的扩展名不匹配。

这是他们的建议:

要解决此问题,请在内容配置中使用更具体的路径,确保仅包含在构建 CSS 时不会更改的目录:

module.exports = {
  content: [
    './src/**/*.{html,js}',
    './src/pages/**/*.{html,js}',
    './src/components/**/*.{html,js}',
    './src/layouts/**/*.{html,js}',
    './src/index.html',
  ],
  // ...
}

有点无赖,希望这会有所帮助。

来源:Tailwind CSS: Content Configuration

【讨论】:

  • 太好了!这对我来说不是一个问题,但我确实指出了内容配置中的错误路径,所以你的解决方案确实节省了我的时间。生成的 Tailwind css 文件不断触发手表。我没有弄清楚它是特定于 Tailwind 的,在文档中找到了很棒的发现!当时我什至打开了文档...
  • @Kablam 太棒了!那么它在您的构建中是否按预期工作?如果是这样,您介意分享您的 tailwind.config.js 吗?好奇您是否必须针对特定目录/文件,或者您是否能够对其进行更广泛的扫描。在我的设置中,如果我在content 中有任何带有globstar ** 的模式,我仍然会得到一个无限循环。不过我可能在其他地方有问题......
  • 我仍在使用 glob,对我来说问题是 content: 指向生成的文件。指定源文件后,不再发生无限循环。我会将 tailwind.config 添加到问题中。如果您提出自己的问题,或者有其他地方可以发布您的代码,我会很乐意看看我们是否可以一起解决!
  • 谢谢,看看您的编辑,它确认我还需要稍微重组我的文件夹/资产。对我来说有点烦人,因为它是一个自定义的 WP 主题,并且不能很好地移动核心文件,但我想我能弄清楚。很奇怪,因为我发现其他教程使用相同的构建(Webpack + Tailwind + Wordpress),他们似乎能够更广泛地扫描 Tailwind ......哦,好吧。
  • 谢谢,这为我节省了可能冗长的 Google 会话。
猜你喜欢
  • 2018-09-16
  • 1970-01-01
  • 2019-12-24
  • 2019-10-23
  • 2018-01-14
  • 2021-10-06
  • 2020-07-20
  • 1970-01-01
  • 2020-08-01
相关资源
最近更新 更多