javascript - Nextjs 外部 css 不在客户端页面转换时更新

标签 javascript css reactjs sass next.js

我对 nextjs 还是个新手,所以我不知道这是一个错误还是我只是错误地实现了它。

我使用本指南成功提取了所有 scss 文件: https://github.com/zeit/next-plugins/tree/master/packages/next-sass

使用服务器端渲染时一切正常。外部 css 文件得到正确更新和应用,但是一旦我进行客户端页面转换,新的 scss 导入就不会注入(inject)到外部 css 文件中。我也不想在初始页面加载时预取每个 scss 文件,它应该在服务器端路由和客户端路由上动态获取和更新外部文件。

我的 next.config.js

const getRoutes = require('./routes');
const path = require('path');
const withSass = require('@zeit/next-sass');

module.exports = withSass({
  exportPathMap: getRoutes,
  // useFileSystemPublicRoutes: false,
  cssModules: true,
  cssLoaderOptions: {
    importLoaders: 1,
    localIdentName: "[local]___[hash:base64:5]",
  },
})

示例组件

import { Fragment } from 'react';
import Main from '../components/main';
import style from '../styles/pages/parkett.scss';

const Parkett = () => 
  <Fragment>
    <section className={`section ${style.sec_two_parkett}`}>
      <div className={`sec_text ${style.sec_two_text}`}>
        <h2 className="didonesque_headline">Detailiert</h2>
        <p className="normal_text">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>
      </div>
    </section>
    <section className={`section ${style.sec_three_parkett}`}>
      <div className={`sec_text ${style.sec_three_text}`}>
        <h2 className="didonesque_headline">Erstaunlich</h2>
        <p className="normal_text">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.</p>
      </div>
    </section>
  </Fragment> 

export default () => 
  <Main 
    title="parkett" 
    component={<Parkett />} 
    links={['Treppe', 'Moebel', 'Innenausbau']}
    />

最佳答案

您好,我建议您使用 styled-jsx-css-loader将 css 加载到 jsx 中对我和 sass loader 都很好将 sass 转换为 css,你可以像这样在 next.config.js 文件中链接它们:

config.module.rules.push({
      test: /\.scss$/,
      use: [
        {
          loader: 'emit-file-loader',
          options: {
            name: 'dist/[path][name].[ext].js',
          },
        },
        {
          loader: 'babel-loader',
          options: {
            babelrc: false,
            extends: path.resolve(__dirname, './.babelrc'),
          },
        },
        'styled-jsx-css-loader',
        // optional if you wanna purify css if you are using bootstrap or a huge css lib
        // {
        //   loader: 'css-purify-webpack-loader',
        //   options: {
        //     includes: [
        //       './pages/*.js',
        //       './components/**/*.js',
        //       './containers/**/*.js',
        //     ],
        //   },
        // },
        {
          loader: 'sass-loader',
          options: {
            sourceMap: dev,
          },
        },
      ],
    });

然后像这样导入 sass:

import commonStyle from '../styles/common/index.scss';
<style jsx global>
 {commonStyle}
</style>

关于javascript - Nextjs 外部 css 不在客户端页面转换时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49048803/

相关文章:

css - 设置背景图片导致页面加载过重

html - 正确对齐页脚的内容

reactjs - 在 React 中检索数据属性值的最佳实践

javascript - 如何在 javascript 中初始化 a\x23 值?

javascript - 如何从选择器字符串添加类?

css - 使用变量和统一设置 css 值

javascript - 当每个 div 滚动到 View 和更新状态时触发事件

reactjs - react 固定大小的文本 block

javascript - insertRow() 不适用于 FOR 循环

javascript - 根据另一个值存储数组的项目