React、redux、next.jsを使用してプロジェクトを作成しています。CSSファイルをjsにインポートします。
next.js /#css および next-css の指示に従いましたが、CSSスタイルが機能しないことがわかりました。
私のコードは次のとおりです:
pages/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。Chromeには「Uncaught SyntaxError」がありますが、ページのレンダリングには影響しないようです。しかし、私はまだ理由と解決策を疑問に思っています。 chromeのindex.jsエラーはimg以下です
2。Chromeに示されているように、「example」クラスはありません。つまり、style.cssファイルはロードされません。何か不足していますか?クロムにCSSファイルはありません
前もって感謝します。
編集:Next.js 7の時点で、.cssファイルのインポートをサポートするために必要なことは、 withCSS を登録することだけですnext.config.jsのプラグイン。プラグインをインストールすることから始めます。
npm install --save @zeit/next-css
次に、プロジェクトルートにnext.config.js
ファイルを作成し、次を追加します。
// next.config.js
const withCSS = require('@zeit/next-css')
module.exports = withCSS({/* my next config */})
簡単なページを作成し、CSSをインポートすることで、これが機能していることをテストできます。 CSSファイルを作成することから始めます。
// ./index.css
div {
color: tomato;
}
次に、index.js
ファイルを使用してpages
フォルダーを作成します。次に、コンポーネントで次のようなことを実行できます。
// ./pages/index.js
import "../index.css"
export default () => <div>Welcome to next.js 7!</div>
数行の設定でCSSモジュールを使用することもできます。詳細については、 nextjs.org/docs/#css のドキュメントをご覧ください。
非推奨:Next.js <7:
pages
フォルダーに_document.js
ファイルを作成し、コンパイル済みのCSSファイルにリンクする必要もあります。次のコンテンツで試してください:
// ./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>
)
}
}
スタイルシートは.next/static/style.css
にコンパイルされます。つまり、CSSファイルは、コードのhref
タグのlink
属性の値である/_next/static/style.css
から提供されます。上記。
最初の質問に関しては、おそらくChromeインポート構文を理解していません。chrome:flags
でExperimental Web Platformフラグを有効にして、それが解決するかどうかを確認してください。それ。
カスタム_ 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>
);
}
}
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;
},
});
サーバーの再起動を忘れないでください
As 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に、この明確な解決策に感謝します。