我正在使用react,redux和next.js创建一个项目,并希望在js中导入CSS文件。
我按照next.js/#css和next-css中的说明操作,但发现CSS样式不起作用。
我的代码如下:
页/ index.js:
import React from 'react'
import "../style.css"
class Index extends React.Component {
render() {
return (
<div className="example">Hello World!</div>
);
}
}
export default Index
next.config.js:
const withCSS = require('@zeit/next-css')
module.exports = withCSS()
的style.css:
.example {
font-size: 50px;
color: blue;
}
的package.json:
{
"name": "my-app",
"version": "0.1.0",
"private": true,
"dependencies": {
"@zeit/next-css": "^0.1.5",
"next": "^6.0.0",
"react": "^16.3.2",
"react-dom": "^16.3.2",
"react-redux": "^5.0.7",
"react-scripts": "1.1.4",
"redux": "^4.0.0",
"redux-devtools": "^3.4.1"
},
"scripts": {
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject",
"dev": "next",
"build": "next build",
"start": "next start"
}
}
问题:
1。有一个&#34; Uncaught SyntaxError&#34;在Chrome中,但它似乎不会影响页面的呈现。但我仍然想知道原因和解决方案。 chrome中的index.js错误低于img
2。如Chrome所示,没有&#34;示例&#34; class,表示未加载style.css文件。我错过了什么吗? chrome中没有CSS文件
提前致谢。
答案 0 :(得分:8)
编辑:从Next.js 7开始,您需要做的就是支持导入.css文件,就是在next.config.js中注册withCSS插件。首先安装插件:
Private Sub Toggle10_Click()
Call Shell("python.exe D:\project\nc\test.py ", 1)
End Sub
然后在项目根目录中创建npm install --save @zeit/next-css
文件,并将以下内容添加到其中:
next.config.js
您可以通过创建一个简单的页面并导入一些CSS来测试它是否正常工作。首先创建一个CSS文件:
// next.config.js
const withCSS = require('@zeit/next-css')
module.exports = withCSS({/* my next config */})
然后使用// ./index.css
div {
color: tomato;
}
文件创建pages
文件夹。然后你可以在你的组件中做这样的事情:
index.js
你也可以使用带有几行配置的CSS模块。有关详细信息,请查看nextjs.org/docs/#css上的文档。
不推荐使用:Next.js&lt; 7:强>
您还需要在// ./pages/index.js
import "../index.css"
export default () => <div>Welcome to next.js 7!</div>
文件夹中创建一个_document.js
文件,并链接到已编译的CSS文件。尝试使用以下内容:
pages
样式表编译为// ./pages/_document.js
import Document, { Head, Main, NextScript } from 'next/document'
export default class MyDocument extends Document {
render() {
return (
<html>
<Head>
<link rel="stylesheet" href="/_next/static/style.css" />
</Head>
<body>
<Main />
<NextScript />
</body>
</html>
)
}
}
,这意味着CSS文件是从.next/static/style.css
提供的,这是/_next/static/style.css
标记中href
属性的值。上面的代码。
至于第一个问题,Chrome可能不了解导入语法。尝试在link
中启用实验性Web平台标记,看看是否能解决此问题。
答案 1 :(得分:3)
对于来到这里的任何人,新的Next JS都开箱即用地支持CSS。要注意的是,对于模块(组件),必须将它们命名为组件。因此,如果您在components
目录中有标题,则必须将其命名为header.module.css
答案 2 :(得分:0)
您需要创建自定义 _document.js 文件。
添加CSS时的自定义文档如下所示:
import React from "react";
import Document, { Head, Main, NextScript } from "next/document";
export default class MyDocument extends Document {
render() {
const { buildManifest } = this.props;
const { css } = buildManifest;
return (
<html lang="fa" dir="rtl">
<Head>
{css.map(file => (
<link rel="stylesheet" href={`/_next/${file}`} key={file} />
))}
</Head>
<body>
<Main />
<NextScript />
</body>
</html>
);
}
}
答案 3 :(得分:0)
正如Zeit所说:
import Head from 'next/head'
function IndexPage() {
return (
<div>
<Head>
<title>My page title</title>
<meta name="viewport" content="initial-scale=1.0, width=device-width" />
</Head>
<p>Hello world!</p>
</div>
)
}
export default IndexPage
就是这样,Next.js应该在页面顶部呈现链接标记,浏览器将下载CSS并将其应用。
感谢Github的Sergiodxa提供了明确的解决方案。
答案 4 :(得分:0)
如果您使用next.js,请执行此操作。
在根项目中创建 next.config.js
const withCSS = require('@zeit/next-css');
function HACK_removeMinimizeOptionFromCssLoaders(config) {
console.warn(
'HACK: Removing `minimize` option from `css-loader` entries in Webpack config',
);
config.module.rules.forEach(rule => {
if (Array.isArray(rule.use)) {
rule.use.forEach(u => {
if (u.loader === 'css-loader' && u.options) {
delete u.options.minimize;
}
});
}
});
}
module.exports = withCSS({
webpack(config) {
HACK_removeMinimizeOptionFromCssLoaders(config);
return config;
},
});
别忘了重启服务器
答案 5 :(得分:0)
将{name}.css
添加到src/static/styles/
。
然后修改Head
中的src/pages/_document.js
以包括以下link
:
<Head>
<link href="/static/styles/{name}.css" rel="stylesheet">
</Head>
答案 6 :(得分:0)
next 9.3以上,全局css写在styles/globals.css中,可以导入_app.js
import "../styles/globals.css";
然后对于每个组件,你可以编写自己的css并导入到组件中。注意命名:nameOfFile.module.css
假设您有“product.js”组件和“product.module.css”。您想将 css 从“product.css”加载到“product.js”
import classes from "./product.module.css" // assuming it's in the same directory
您将所有类名放入 product.module.css
。假设您在 .main-product
中有 product.module.css
。在 product.js
中,假设您有一个 div
样式
<div className={classes.main-product} > </div>
通过css模块特性,你可以在其他组件中使用相同的className,不会冲突。因为当 next.js 编译时,它将使用其模块散列 className 的名称。所以来自不同模块的相同类名的哈希值将相同
答案 7 :(得分:0)
如果您的应用直接使用 web 5 包,则将此设置为 false。
module.exports = {
// Webpack 5 is enabled by default
// You can still use webpack 4 while upgrading to the latest version of
// Next.js by adding the "webpack5: false" flag
webpack5: false,
}
你可以使用 webpack 4。
yarn add webpack@webpack-4
答案 8 :(得分:0)
全局 CSS 必须在您的自定义
由于其副作用和顺序问题,全局 CSS 不能用于自定义以外的文件。
可能的修复方法 将所有全局 CSS 导入重新定位到您的 pages/_app.js 文件。
或者,通过 CSS 模块更新您的组件以使用本地 CSS(组件级 CSS)。这是首选方法。
示例:
// pages/_app.js
import '../styles.css'
export default function MyApp({ Component, pageProps }) {
return <Component {...pageProps} />
}