Why am I getting CssSyntaxError: <css input> from PostCSS build?
Why am I getting CssSyntaxError: <css input> from PostCSS build?
我正在做我认为是标准的Next.js构建。它在开发模式下运行良好,但当我尝试进行生产构建时,我得到:
(node:39333) UnhandledPromiseRejectionWarning: CssSyntaxError: <css input>:17:20: Missed semicolon
at Input.error (/node_modules/next/node_modules/postcss/lib/input.js:129:16)
但奇怪的是:我没有 CSS。
实际上,我有一些 CSS 但我将其全部删除以找出问题所在。没有变化。
经过一个小时左右的挫折,我做了我应该在前 10 分钟内完成的事情,并编辑了文件 postcss/lib/input.js
以打印出有问题的 CSS,并且得到了相当惊喜。让我按照事件发生的顺序来描述事件的顺序,而不是我发现它们的顺序。
几天前,我从设计师那里收到了一份 HTML 文件,里面有她想要的布局。在 <head>
中,她选择的字体有一些 <link>
,包括:
<link
href="https://fonts.googleapis.com/css?family=FontAwesome"
rel="stylesheet"
/>
我没有注意到(显然设计者也没有)的是没有这样的字体系列(FontAwesome是字体toolkit的名称),我尽职尽责地将这一行复制到我的 React 代码中。 Next.js 浏览器解决了这个问题。
PostCSS 没有。相反,在尝试生产构建时,它尝试解析 Google 发送的 错误页面 。
不幸的是,错误页面只是一个错误页面。 Google 中没有人仔细检查过它是否符合严格的标准。果然,靠近顶部我发现:
body {
background: 100% 5px no-repeat;
margin-top: 0;
max-width: none:
最后那个冒号应该是分号。当然,去掉无用的link到不存在的字体就解决了问题。
现在不知道该怪谁了:
- Google 错误页面上有语法错误
- Google 因为没有运行 检查他们的错误页面
- Google 用于在找不到字体时返回 400 而不是 404
- PostCSS 试图解析错误页面(我不知道 400/404 的东西是否混淆了它,但仍然)
- PostCSS 给出了如此晦涩的错误信息
- 设计师给我一个link一个糟糕的字体
因为,你知道我不是在自责...
在您的 Next.js 应用中试试这个:
<Head>
<link
href="https://fonts.googleapis.com/css2?family=Petrona"
rel="stylesheet"
/>
</Head>
请注意,您的代码与我的代码之间的唯一区别是:css2
对于仍然无法理解问题或找出错误所在的人,请检查是否有任何链接,例如
<link
href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap"
rel="stylesheet"
/>
请确保您的权重按升序排列,否则它会从 google 抛出 400 错误并且仍然显示来自 PostCSS
的相同错误
以下代码解决了我的问题。
前:
<link
href="https://fonts.googleapis.com/css2?family=Monserat:wght@300;400;500;900&display=swap"
rel="stylesheet"
/>
Post:
<link
href={`https://fonts.googleapis.com/css2?family=Monserat:wght@300;400;500;900&display=swap`}
rel="stylesheet"
/>
我正在做我认为是标准的Next.js构建。它在开发模式下运行良好,但当我尝试进行生产构建时,我得到:
(node:39333) UnhandledPromiseRejectionWarning: CssSyntaxError: <css input>:17:20: Missed semicolon
at Input.error (/node_modules/next/node_modules/postcss/lib/input.js:129:16)
但奇怪的是:我没有 CSS。
实际上,我有一些 CSS 但我将其全部删除以找出问题所在。没有变化。
经过一个小时左右的挫折,我做了我应该在前 10 分钟内完成的事情,并编辑了文件 postcss/lib/input.js
以打印出有问题的 CSS,并且得到了相当惊喜。让我按照事件发生的顺序来描述事件的顺序,而不是我发现它们的顺序。
几天前,我从设计师那里收到了一份 HTML 文件,里面有她想要的布局。在 <head>
中,她选择的字体有一些 <link>
,包括:
<link
href="https://fonts.googleapis.com/css?family=FontAwesome"
rel="stylesheet"
/>
我没有注意到(显然设计者也没有)的是没有这样的字体系列(FontAwesome是字体toolkit的名称),我尽职尽责地将这一行复制到我的 React 代码中。 Next.js 浏览器解决了这个问题。
PostCSS 没有。相反,在尝试生产构建时,它尝试解析 Google 发送的 错误页面 。
不幸的是,错误页面只是一个错误页面。 Google 中没有人仔细检查过它是否符合严格的标准。果然,靠近顶部我发现:
body {
background: 100% 5px no-repeat;
margin-top: 0;
max-width: none:
最后那个冒号应该是分号。当然,去掉无用的link到不存在的字体就解决了问题。
现在不知道该怪谁了:
- Google 错误页面上有语法错误
- Google 因为没有运行 检查他们的错误页面
- Google 用于在找不到字体时返回 400 而不是 404
- PostCSS 试图解析错误页面(我不知道 400/404 的东西是否混淆了它,但仍然)
- PostCSS 给出了如此晦涩的错误信息
- 设计师给我一个link一个糟糕的字体
因为,你知道我不是在自责...
在您的 Next.js 应用中试试这个:
<Head>
<link
href="https://fonts.googleapis.com/css2?family=Petrona"
rel="stylesheet"
/>
</Head>
请注意,您的代码与我的代码之间的唯一区别是:css2
对于仍然无法理解问题或找出错误所在的人,请检查是否有任何链接,例如
<link
href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap"
rel="stylesheet"
/>
请确保您的权重按升序排列,否则它会从 google 抛出 400 错误并且仍然显示来自 PostCSS
的相同错误以下代码解决了我的问题。
前:
<link
href="https://fonts.googleapis.com/css2?family=Monserat:wght@300;400;500;900&display=swap"
rel="stylesheet"
/>
Post:
<link
href={`https://fonts.googleapis.com/css2?family=Monserat:wght@300;400;500;900&display=swap`}
rel="stylesheet"
/>