事情经过
很早之前看到过 NuxtHub,但注册了半截,到绑定 Cloudflare 那就暂时弃坑了
最近 Nuxt 用的非常上头,同时也在用 Cloudflare,昨天逛 Github 发现个项目,看到官网下面写着 Deployed on NuxtHub
一时间来了兴趣,想看看 NuxtHub 是个啥
NuxtHub
NuxtHub 是一个对接 Cloudflare Workers、Pages 的后台,同时提供 Nuxt 模块,比如数据库、KV、AI 等
可以非常方便的部署包含前后端的 Nuxt 项目
问题
把最近在做的 Nuxt 项目部署上去的时候发现,本地打包后用命令部署是没问题的
但用 Cloudflare 部署就会卡在下面日志的地方
...
15:53:04.900 [info] vite v5.4.6 building for production...
15:53:04.930 [info] transforming...
15:53:06.277 Deprecation [legacy-js-api]: The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0.
15:53:06.324 Deprecation [legacy-js-api]: The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0.
16:29:21.641 Failed: build exceeded the time limit and was terminated. Refer to https://developers.cloudflare.com/pages/platform/limits/#builds for build limits最后会构建超时,部署失败
排查
因为本地打包也会报这个 Sass 的警告,所以本来感觉不是这个的问题
后面尝试用了官方的 Demo 部署,发现正常,经过对比发现是 Sass
代码中使用 <style lang="scss"> 就会有这个警告,但又不能不用
解决
搜了一下发现是要在 nuxt.config.js 中加上
{
vite: {
css: {
preprocessorOptions: {
scss: {
api: 'modern-compiler'
}
}
}
}
}这样确实不报警告了,transforming... 后面也会正常走,但新问题是都完成后进程不会退出,还是一直卡在那
于是我想了个折中的方案,我自己写个脚本跑构建命令,通过日志输出判断是否构建成功,再手动退出进程
import { spawn } from 'node:child_process'
import process from 'node:process'
const child = spawn('npx', ['nuxi', 'build'])
child.stdout.on('data', (data) => {
process.stdout.write(data)
if (!~data.indexOf('npx nuxthub deploy')) {
return
}
console.log('Build Success')
setTimeout(() => {
process.exit(0)
}, 3000)
})搞定 ✔
评论区域将在可见后加载…