[英]How to import CSS files from public folder in the new app folder of Next.js 13?
以“老式”方式(利用) /pages ,我会编辑/pages目录下的_app.js文件,添加如下内容:
import Head from 'next/head'
export default function MyApp({ Component, pageProps }) {
return <>
<Head>
<link rel="stylesheet" href="/css/styles.css" />
</Head>
<Component {...pageProps} />
</>
}
但是在新版本中没有/pages/_app.js文件。 有layout.js和head.js代替。 当我尝试添加head.js (在 /favicon.ico 旁边)导入时出现错误:
react_devtools_backend.js:4012 警告:无法在不知道其优先级的情况下在主文档之外呈现。 考虑添加 precedence="default" 或将其移至根标记中。
当我尝试导入layout.js文件时,如下所示:
import "/css/styles.css";
我收到编译错误:
找不到模块:无法解析“/css/styles.css”
我正在查看官方文档,但他们只建议如何从全局 styles (../../..) 而不是从公共文件夹导入。
如此处的官方文档所述,您需要创建pages/_app.js
文件(如果不存在)。
然后你可以这样导入:
import Head from 'next/head'
export default function MyApp({ Component, pageProps }) {
return <>
<Head>
<link rel="stylesheet" href="/css/styles.css" />
</Head>
<Component {...pageProps} />
</>
}
您可以使用 ../.. 从public
导入。
与目录结构
/[project root]
/public
/css
- styles.css
/app
- layout.js
您可以使用import '../public/css/styles.css'
导入您的 styles
如果您需要从public
导入的 CSS,您可以按照您所说的那样在head.js
中执行此操作,但您需要在link
中添加precedence="default"
,正如他们在文档中所说:
如果你想手动放置,它需要一个优先字段,它是一个新的 React 特定属性
<link rel="stylesheet" precedence="default" />
。
// in head.js alongside `layout.js` and `page.js`
export default function Head() {
return (
<>
<title>Create Next App</title>
<meta content="width=device-width, initial-scale=1" name="viewport" />
<meta name="description" content="Generated by create next app" />
<link rel="icon" href="/favicon.ico" />
<link rel="stylesheet" href="/css/styles.css" precedence="default" />
</>
);
}
您可能会收到 Eslint 警告“不要手动包含样式表” ,您可以通过添加以下注释来停用该警告:
{/* eslint-disable-next-line @next/next/no-css-tags */}
<link rel="stylesheet" href="/css/styles.css" precedence="default" />
此外,您可能已经知道,例如,包含这样的 css 文件不允许在您更改其内容时进行实时重新加载。 所以要用于不会经常使用的外部 CSS。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.