Next.js 样式表未加载

Posted

技术标签:

【中文标题】Next.js 样式表未加载【英文标题】:Next.js stylesheet is not loaded 【发布时间】:2019-01-26 16:11:17 【问题描述】:

我正在使用 Next.js 构建我的网站。我使用 express.js 服务器修改服务器,所以我的项目的根文件夹中有 server.js

当我启动运行node server.js 的服务器npm run dev 时,我的主页正确呈现。但是当我导航到我网站中的其他一些页面时,没有加载 css。但是如果我刷新页面,它会加载css,问题就消失了

const express = require('express')
const next = require('next')

const dev = process.env.NODE_ENV !== 'production'
const app = next(dev)
const handle = app.getRequestHandler()

app.prepare().then(() => 
  const server = express()

  server.get('*', (req, res) => 
    return handle(req, res)
  )

  const port = process.env.PORT || 3000

  server.listen(port, err => 
    if (err) throw err
    console.log(`> Ready on port $port...`)
  )
)

这是我的server.js 文件。我认为代码没有问题。 我使用 @zeit/next-less 包来编译我的 LESS 样式表 请帮忙

谢谢

【问题讨论】:

检查编译后的css保存在哪里。 文档说编译后的LESS文件编译为.next/static/style.css 我对 express.js 服务器没有任何经验,但如果文件存在于.next/static/style.css 中,那么我认为可能是链接路径不正确。检查 js 文件的地址是否正确。但是您说它无法正确加载到“我网站中的某些其他页面”上。请说明它在哪些页面上不起作用,也许他们的源代码会有所帮助。 奇怪的是,我尝试将网站上传到 docker 和弹性 beanstalk。并且生产版本正确加载 css -,- 那么问题出在哪里? 【参考方案1】:

看看这个:https://github.com/zeit/next-plugins/issues/282

简而言之,作为一种解决方法:

    在 /static/ 目录中创建一个空的 CSS 文件。 在_app.js中导入:
import '../static/jank-empty.css';

我希望它会有所帮助。

【讨论】:

帮了我大忙,我必须从这里添加 _app.js:nextjs.org/docs/advanced-features/custom-app 然后重新启动开发服务器以便它看到它【参考方案2】:

对我来说,问题是 nextjs 没有加载 rel=stylesheet 链接标签。它只能加载 rel=preload 链接标签。 所以我做了一个这样的解决方法:

document.querySelectorAll("link[rel='preload'][as='style']").forEach(link => link.rel = "stylesheet")

【讨论】:

以上是关于Next.js 样式表未加载的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC:样式表未加载,因为它的 MIME 类型“text/html”不是“text/css”

Google App Engine、Jinja2 CSS 样式表未加载 (404)

样式表未在ie11或firefox上加载

刷新网站时样式表未更新

使用 next.js 和样式化组件重新加载时的 Flash Of Unstyled Text (FOUT)

Taiwlind CSS:样式在生产中不加载,在开发中工作。将 Next.js 与 MDX 一起使用