Обновление с Create-React-App до Next.js - таблицы стилей CSS не работают - PullRequest
0 голосов
/ 07 октября 2018

Недавно мы узнали, что мы должны использовать SSR для нашего проекта React.Я проверил каждый известный мне метод и почти проверил все методы, которые я нашел на средних и других сайтах.И после большой работы я решил, что нам нужно перейти на Next JS.

Пока процесс переноса все хорошо, но для таблиц стилей.

В старой версиинаше приложение, мы использовали webpack для связывания наших стилей с проектом, и все было хорошо.

Это webpack.config.js

const HtmlWebpackPlugin = require('html-webpack-plugin');
const ExtractTextPlugin = require("extract-text-webpack-plugin");
const port = process.env.PORT || 3000;
const extractSCSS = new ExtractTextPlugin('./[name].css');

// const UglifyJS = require('uglifyjs-webpack-plugin');
module.exports = {

  mode: 'development',
  output: {
    filename: 'bundle.[hash].js',
    publicPath: '/'
  },
  devtool: 'source-map',
  module: {
    rules: [

      // First Rule

      {
        test: /\.(js)$/,
        exclude: /node_modules/,
        use: ['babel-loader'],

      },

      // Second Rule

      {
        test: /\.scss$/,
        use: ['css-hot-loader'].concat(extractSCSS.extract({
          fallback: 'style-loader',
          use: [
            {
              loader: 'css-loader?sourceMap',
              options: { alias: { '../img': '../public/img' }, sourceMap: true }
            },
            {
              loader: 'sass-loader',
              options: {
                sourceMap: true
              }
            }
          ]
        }))
      },
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader']
      },

        {
        test: /\.(png|svg|jpg|gif)$/,
        use: [
          'file-loader'
        ]
      },
      {
        test: /\.(woff|woff2|eot|ttf|otf)$/,
        use: [
          'file-loader'
        ]
      }
    ]
  },
  plugins: [

    new HtmlWebpackPlugin({
      template: 'public/index.html',
      favicon: 'public/favicon.ico'

    }),


    extractSCSS,

  ],
  devServer: {
    host: 'localhost',
    port: port,
    historyApiFallback: true,
    open: true
  }
};

и после того, как я перенес приложение, мой next.config.js выглядит так:

// next.config.js
const withSass = require('@zeit/next-sass')
const withCSS = require('@zeit/next-css')

module.exports = withCSS( withSass(
  {
    webpack(config, options) {
      config.module.rules.push({
        test: /\.(png|jpg|gif|svg|eot|ttf|woff|woff2)$/,
        use: {
          loader: 'url-loader',
          options: {
            limit: 100000
          }
        }
      },
      )

      return config
    },

  }
))

Проблема в том, что все отображается правильно, но в нем нет таблиц стилей, и он не содержит никакого стиля.Есть ли кто-нибудь, кто мог бы помочь мне решить эту проблему?

Ответы [ 4 ]

0 голосов
/ 20 марта 2019

Для использования CSS из node_modules вам не нужен этот модный конфиг.

3 простых шага:

  1. Установите плагин next-css:
npm install --save @zeit/next-css
Создайте в своем корневом каталоге next.config.js со следующим содержимым:
// next.config.js 
const withCSS = require('@zeit/next-css')

module.exports = withCSS({
  cssLoaderOptions: {
    url: false
  }
})
Теперь вы сможете импортировать таблицы стилей из узлов_модулей следующим образом:
import 'bootstrap-css-only/css/bootstrap.min.css';

Примечание: Использование Next v 8 +

Справочная информация: Я потратил несколько часов, пытаясь просто импортировать CSS, установленный как node_module, и различные решения - это в основном хакерские обходные пути, но, как показано выше, есть простое решение.Он был предоставлен одним из членов основной команды: https://spectrum.chat/next-js/general/ignoring-folders-files-specifically-fonts~4f68cfd5-d576-46b8-adc8-86e9d7ea0b1f

0 голосов
/ 08 октября 2018

Вам не нужны плагины с CSS и withSass.

Если вы используете Sass, плагин withSass скомпилирует его в CSS.

Просто убедитесь, что вы добавили путь к CSSфайл в файле _document.js внутри компонента Head , например:

<Head>
  <link rel="stylesheet" href="/_next/static/style.css" />
</Head>
0 голосов
/ 16 октября 2018

Для импорта css вы можете использовать Head компонент nextJS.

import Head from 'next/head';
<Head>
    <link rel="stylesheet" href="path of the css" />
</Head>
0 голосов
/ 07 октября 2018

Это не реальный ответ, но CSS в Next.js просто отстой!Я постоянно пытаюсь заставить его работать, поэтому я решил следовать их документам и просто использовать:

const App = () => {
  return (
    {style}
    <div/>
  );
}

let style = (<style jsx>
{`
.someClass {}
`}
</style> )

export default App;

Таким образом, вы можете использовать CSS, как в обычном HTML, без какого-либо внешнего импорта

источник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...