如何从tailwind CSS Play CDN切换到生产构建版本?

5
我正在使用Tailwind CSS Play CDN进行本地开发,并希望使用PostCSS构建生产版本。基本上,每次我需要手动替换index.html中的以下行: <script src="https://cdn.tailwindcss.com"></script><link href="/dist/main.css" rel="stylesheet"> 然后再推送到生产站点。有什么自动化方式可以在每次发布网站时自动完成这个任务吗?
2个回答

1

来自Tailwind文档的引用

使用Play CDN可以在浏览器中直接尝试Tailwind,无需任何构建步骤。 Play CDN仅用于开发目的,不适合生产。

因此,您需要使用构建工具,例如webpackRollupViteParcel


1
我知道如何使用PostCSS构建Tailwind CSS以用于生产环境。但我的问题是,每次我将代码从本地开发环境推送到生产站点时,如何自动替换index.html文件中的Play CDN为生产构建的CSS。 - CoolMoon
不,我没有使用任何框架,只是普通的HTML文件。基本上我只在开发中使用Play CDN(没有其他CSS文件),并且不在本地机器上使用npm run dev。在将代码推送到生产服务器之前,它会在生产服务器上使用PostCSS构建CSS文件以发布网站。因此,在本地机器上没有其他CSS文件,只有编译后的CSS文件在生产服务器上。 - CoolMoon
1
有人能告诉我为什么CDN是生产环境的最佳选择吗?我还能使用它吗? - Jin Lim
1
即使所有的类都不是那么大,但CDN的唯一缺点就是这个吗? @nosnart - Jin Lim
1
更具体地回答为什么不在生产中使用CDN,Play CDN将会增加约500kb的JavaScript到您的页面加载中,在慢速连接上可能会非常显著;在此期间,您的样式也不会呈现,这意味着页面可能看起来是损坏的,直到JS下载完成。最后,在脚本执行后,它将发出另一个网络请求,以获取另外xx或xxx KB的CSS,具体取决于您的页面需要多少。与构建相比,不会下载额外的JS,并且您的样式包括在初始页面加载中,因此对于慢速连接的用户来说,这将是更好的体验。 - Derrick
显示剩余8条评论

0

使用服务器端语言来渲染页面是一个不错的选择,因为你可以用一个变量来替换那一行代码,这个变量会根据你的 CDN 或者构建环境来渲染这一行代码,比如说当 production=true 时。

例如,在 NodeJS 中,你可以使用像 EJS 这样的模板引擎,或者使用更简单的模板字面量来实现:

const production = false 
const twCdn = `<script src="https://cdn.tailwindcss.com"></script>`
const build = <link href="/dist/main.css" rel="stylesheet">`
const html = `<html>
${ production ? cdn : build } 
<body>
  <h1 class="bg-green-500">hello world</h1>
</body>
</html>`

//... setup a server such as Express and serve 
//the html var as a route ex: 

expressApp.get('/hello', (req, res) => res.send(html)) 

如果您不想直接使用动态服务器,您可以使用任何语言编写脚本,直接在您的hello.html文件(或其他名称)中执行替换操作,即在PostCSS构建脚本之后运行。对于NodeJs,您可以使用Cheerio,它允许您无头地使用jQuery API:

例如:

const fs = require('fs') 
const cheerio = require('cheerio')
//import the dev page: 
const $ = cheerio.load(fs.readFileSync(__dirname + '/hello.html'))

//perform the swap: 
$('head').append('<link href="/dist/main.css" rel="stylesheet">') 
$('script[src="https://cdn.tailwindcss.com"]').remove() 

//overwrite the page, now prod ready: 
fs.writeFileSync( __dirname + '/hello.html', $.html(), 'utf8' ) 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接