部署时未应用 Tailwind CSS 样式

Posted

技术标签:

【中文标题】部署时未应用 Tailwind CSS 样式【英文标题】:Tailwind CSS styling not being applied on deploy 【发布时间】:2020-06-17 02:42:42 【问题描述】:

这是我第一次使用 Tailwind CSS 来设置我的 React 应用程序的样式。当我在本地运行应用程序时,它的样式完美,但是,现在我已经使用gh-pages 部署了它,没有应用样式。我需要对我的 package.json 文件进行更改吗?

Link to the live site


  "name": "seafaring",
  "version": "0.1.0",
  "private": true,
  "homepage": "https://superhackerboy.github.io/sweet-seafaring-dreams/",
  "dependencies": 
    "@testing-library/jest-dom": "^4.2.4",
    "@testing-library/react": "^9.3.2",
    "@testing-library/user-event": "^7.1.2",
    "axios": "^0.19.2",
    "gh-pages": "^2.2.0",
    "react": "^16.12.0",
    "react-dom": "^16.12.0",
    "react-scripts": "3.4.0"
  ,
  "scripts": 
    "build:css": "postcss src/styles/tailwind.css -o src/styles/index.css",
    "watch:css": "postcss src/styles/tailwind.css -o src/styles/index.css --watch",
    "start": "cross-env NODE_ENV=development concurrently \"npm run watch:css\" \"react-scripts start\"",
    "build": "cross-env NODE_ENV=production concurrently \"npm run build:css\" \"react-scripts build\"",
    "test": "react-scripts test",
    "predeploy": "npm run build",
    "deploy": "gh-pages -d build",
    "eject": "react-scripts eject"
  ,
  "eslintConfig": 
    "extends": "react-app"
  ,
  "browserslist": 
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  ,
  "devDependencies": 
    "@fullhuman/postcss-purgecss": "^2.1.0",
    "autoprefixer": "^9.7.4",
    "concurrently": "^5.1.0",
    "cross-env": "^7.0.0",
    "cssnano": "^4.1.10",
    "postcss-cli": "^7.1.0",
    "purgecss": "^2.1.0",
    "tailwindcss": "^1.2.0"
  


【问题讨论】:

你找到解决办法了吗? @DoryDaniel 我没有。我最终只使用了他们的 CDN。 你在使用打字稿吗?如果是,则必须将其包含在 'tailwind.confing.js' 文件中 【参考方案1】:

虽然 Fred 当前的最佳答案是一个可行的解决方案。我在 Tailwind 文档中找到了更好的解决方案。

您可以在tailwind.config.js 中指定一个安全列表,此安全列表中指定的类将永远不会被清除。

// tailwind.config.js
module.exports = 
  purge: 
    content: ['./src/**/*.html'],
    safelist: [
      'bg-blue-500',
      'text-center',
      'hover:opacity-100',
      // ...
      'lg:text-right',
    ]
  ,
  // ...

更多信息:https://tailwindcss.com/docs/optimizing-for-production#safelisting-specific-classes

【讨论】:

谢谢。这是问题的正确答案。【参考方案2】:

出现此问题是因为 purge-css 删除不使用样式。 您可以通过向该组件中的 div 元素添加您想要的颜色并隐藏该组件来防止这种情况发生。

示例:

            <div className="hidden bg-success bg-info bg-danger bg-warning"></div>

这将解决您的问题。

【讨论】:

【参考方案3】:

Tailwind 类需要是可清除的,如其文档中所述:https://tailwindcss.com/docs/optimizing-for-production#writing-purgeable-html。如果您将类名与 w-$sidebarWidth 等变量连接起来,它们会在构建时被剥离并丢失。

您需要改变构建动态名称的方法。这就是我所做的,这对我来说比必须维护另一个答案所建议的评论列表更有意义:

    将要在类名中使用的任何变量存储为 Tailwind 文档中描述的确切值。一个例子可能是:
// lib/tw.js
export const HEADER_HEIGHT_CLASS = "h-16";
    编写一个小辅助函数来帮助构建类
// classnames.js
export default function merge(...args) 
  return args.join(" ");

    当您需要使用动态类名时,将它们放在一起
import cx from "lib/classnames";
import  HEADER_HEIGHT_CLASS  from "lib/tw";

...
<header className=cx("bg-white", HEADER_HEIGHT_CLASS)>
  ...
</header>
...

这可确保字符串 h-16 存在于某处,因此将在部署时被捕获为包含的类。

这个疏忽让我非常头疼,因为我花了几天时间在本地使用一种我认为合理的方法,结果发现部署时一切都损坏了。一旦你了解了它存在的原因,该功能本身就非常有意义,但是,我希望 Tailwind 能在其文档的早期部分更接近地发出某种警告。

【讨论】:

【参考方案4】:

我也遇到过类似的问题。

就我而言,我使用的是动态设置的颜色类,例如 className=text-$color-500

这就是问题所在。

如果您根据官方的 tailwind 文档设置所有内容,您也会自动设置 purgeCSS。然后,这将在构建过程中从您的顺风文件中删除所有未使用的 CSS 类(在您的示例中部署到 gh-pages)

要解决这个问题,您必须将类名具体写在某处,因为purgeCSS 会查找与项目中现有类名匹配的任何字符串

就我而言,我只是在我的一个文件中使用了这样的多行注释:

  /**
   * PurgeCSS:
   * text-red-500
   * text-green-500
   * text-yellow-500
   * text-gray-500
   * text-purple-500
   * text-indigo-500
   * text-blue-500
   * text-pink-500
   *

   */

这解决了 tailwind / purgecss 的任何构建问题,我现在可以愉快地在我的项目中使用动态类。

希望这有帮助,我知道这有点晚了,但我只是偶然发现了这个问题,因为我 尝试自己解决!

【讨论】:

以上是关于部署时未应用 Tailwind CSS 样式的主要内容,如果未能解决你的问题,请参考以下文章

Tailwind CSS 在构建后未应用样式

Tailwind CSS 未应用某些样式

如何在 Flutter 应用程序中使用 Tailwind-css

Tailwind css 在部署时不工作

未应用顺风响应样式

NuxtJS + BootstrapVue + TailwindCSS:我可以有效地使用 Bootstrap Vue 组件,但使用 Tailwind CSS 样式?