导入css和sass文件到Next.js 7

5

我希望能够在我的项目中导入这两种类型的文件。

    import 'styles/index.scss';
    import 'styles/build/_style.css'

重要提示:我使用的是Next.js 7和Webpack 4(随Next.js 7一起提供)。
在Next.js 6中,我们通常在next.config.js文件中使用以下代码:
const withCSS = require('@zeit/next-css')
const withSass = require('@zeit/next-sass')

const commonsChunkConfig = (config, test = /\.css$/) => {
  config.plugins = config.plugins.map(plugin => {
      if (
          plugin.constructor.name === 'CommonsChunkPlugin' &&
          plugin.minChunks != null
  ) {
      const defaultMinChunks = plugin.minChunks;
      plugin.minChunks = (module, count) => {
          if (module.resource && module.resource.match(test)) {
              return true;
          }
          return defaultMinChunks(module, count);
      };
  }
  return plugin;
  });
  return config;
};

module.exports = withCSS(withSass({
  webpack: (config, { isServer }) => {
      config = commonsChunkConfig(config, /\.(sass|scss|css)$/)
      return config
  }
}))

最简单的解决方案是将 _style.css 重命名为 _style.scss 并使用 Sass 加载器。为什么对你不起作用呢? :) - iurii
问题在于有一些包自带了它们自己的 style.css,我只需要导入它们而不改变包的核心。 - Rodrigo Chaclan
好的,我明白了。我添加了一个对我有效的示例设置。 - iurii
4个回答

12

2020年3月更新

Next.js v9.3 添加对 Sass 的支持。更多信息请查看此处

2020年1月更新

Next.js v9.2 增加了对 CSS 的原生支持。更多信息请查看官方文档

要在应用程序中开始使用 CSS 导入,请在 pages/_app.js 中导入 CSS 文件。

由于样式表本质上是全局的,因此必须在 Custom 组件中导入它们。这是为了避免全局样式的类名和排序冲突。

如果您正在使用 @zeit/next-css,我们建议从 next.config.js 和 package.json 中删除该插件,以便在升级时转向内置的 CSS 支持。


这个基本示例同样适用于我同时拥有 next-sassnext-css

/next.config.js

const withSass = require('@zeit/next-sass');
const withCSS = require('@zeit/next-css');

module.exports = withCSS(withSass());

/pages/index.js

import '../styles.scss';
import '../styles.css';

export default () => {
  return (
    <div className="example-sass">
      <h1 className="example-css">Here I am</h1>
    </div>
  );
};

/styles.css

.example-css {
  background-color: #ccc;
}

/styles.scss

$font-size: 50px;

.example-sass {
  font-size: $font-size;
}

/package.json

"dependencies": {
  "@zeit/next-css": "^1.0.1",
  "@zeit/next-sass": "^1.0.1",
  "next": "^7.0.2",
  "node-sass": "^4.10.0",
  "react": "^16.6.3",
  "react-dom": "^16.6.3"
}

这是我在屏幕上看到的内容

希望这能帮助你!

附带一些官方GitHub仓库中的信息


太好了!我只需要更新我的CSS/Sass/Next依赖项,就可以正常工作了!谢谢。 - Rodrigo Chaclan
你有什么想法可以将它部署到zeit-now吗?我应该在now.json中放什么?谢谢。 - Babadzhanov
我刚试了一下,发现在将next/css和next/sass部署到now v2时存在一些问题。这也是我遇到的问题:https://github.com/zeit/next.js/issues/5750#issuecomment-443562606 - iurii
经常遇到这个问题,TypeError: Cannot read property 'local' of undefined - Mr. Pyramid

1
我像这样初始化我的项目,包括 SCSS CSS PNG SVG TTF。
 npm install withSass@canary withCSS@canary node-sass

//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;
    }
  }));

0

对于那些使用外部包(在node_modules中)的人,这是一个适用于next 9.3.0的工作CSS+SASS解决方案。它涉及通过SASS标准导入CSS。此示例使用videojs:

package.json

  "dependencies": {
    "@zeit/next-sass": "^1.0.1",
    "next": "^9.3.0",
    "next-absolute-url": "^1.2.2",
    "node-sass": "^4.13.1",
    "react": "^16.13.0",
    "react-dom": "^16.13.0",
    "video.js": "^7.7.5"
  },

next.config.js:

const withSass = require("@zeit/next-sass");
module.exports = withSass({
  assetPrefix: process.env.NEXT_BASE_PATH || '',
  exportTrailingSlash: true,
  exportPathMap: function() {
    return {
      '/': { page: '/' }
    };
  }
});

组件 "VideoPlayer.jsx" 需要外部 CSS

import './VideoPlayer.scss';

VideoPlayer.scss:

@import '~video.js/dist/video-js.css';

0

使用 next-compose-plugins

它提供了一个更清晰的 API 来创建 next.js 配置,您不需要安装 @zeit/next-css,也不需要进行任何 webpack loader 配置即可使其工作。

以下是一个示例,演示如何使用 @zeit/next-source-maps 插件:

/* Import modules */
const withSourceMaps = require( '@zeit/next-source-maps' );
const withSass = require( '@zeit/next-sass' );
const withPlugins = require( 'next-compose-plugins' );

/* Configuration */
const NextAppConfig = ({
  // config stuff goes here, no webpack loader config required
})

/* Export declaration */
module.exports = withPlugins([ 
  [ withSourceMaps ],  
  [ withSass ]
], NextAppConfig );

我更喜欢在导出之前声明数组,因为这样设置更加清晰:

// ... imports go here

/* Plugins array variable */
var plugins = [ [ withSourceMaps ], [ withSass ] ];

/* CONFIGURATION */
const NextAppConfig = ({
  // Config stuff goes here, no webpack configuration required
})

/* EXPORT DECLARATION */
module.exports = withPlugins( plugins, NextAppConfig );

https://github.com/cyrilwanner/next-compose-plugins


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接