部署时未应用 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 样式的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Flutter 应用程序中使用 Tailwind-css
NuxtJS + BootstrapVue + TailwindCSS:我可以有效地使用 Bootstrap Vue 组件,但使用 Tailwind CSS 样式?