从 Next JS 中的节点模块导入 css 文件?

Posted

技术标签:

【中文标题】从 Next JS 中的节点模块导入 css 文件?【英文标题】:Import css files from node modules in Next JS? 【发布时间】:2017-12-24 19:34:17 【问题描述】:

我对@9​​87654321@ 很陌生。将它用于我的应用程序的服务器端渲染。

根据文档,您可以从应该位于根目录的静态文件夹中导入 css 文件,但我想从 node_modules 中导入 css,因为我扩展了引导程序并创建了自己的包。

【问题讨论】:

【参考方案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
  
)
    现在您应该可以像这样从 node_modules 导入样式表了:
import 'bootstrap-css-only/css/bootstrap.min.css';

注意:使用 Next v 8+

其他解决方案是在 next-css 可用之前的解决方法,但如上所示,现在有一个简单且受支持的解决方案。 它由一位核心团队成员提供:https://spectrum.chat/next-js/general/ignoring-folders-files-specifically-fonts~4f68cfd5-d576-46b8-adc8-86e9d7ea0b1f

【讨论】:

这是正确答案。不幸的是,我在投反对票 10 分钟后才意识到这一点,而且 SO 有一条荒谬的规则阻止我改变投票,除非它被编辑。 我没有看到编辑,很遗憾我仍然无法更改我的投票。如果你的不被接受,我也提出了修改建议。【参考方案2】:

使用@webdeb/next-styles 代替@zeit/next-css 即可正常导入任何节点模块样式。

    const withStyles = require('@webdeb/next-styles')

    module.exports = withStyles(
      sass: true, // use .scss files
      modules: true, 
    )

【讨论】:

【参考方案3】:

更新:如果您在将普通 css 导入组件时遇到任何问题,请遵循 this 示例。

除此之外没有区别。 如果您从静态文件夹导入,地址类似于:

import stylesheet from '../static/css/index.css'

现在如果你想从节点模块(例如 rc-slider 包)导入 css,它将是:

import rcstyle from 'rc-slider/assets/index.css';

【讨论】:

不可以这样导入,需要看下一个js文档。 看看这个问题github.com/zeit/next.js/issues/299#issuecomment-316400292 我以为你导入css文件没有问题。现在只需使用 wrap-in-js babel 插件并在导入 css 文件后将它们注入到您的 jsx 中,如下所示:<style dangerouslySetInnerhtml=__html: importedcssfile/> @dev123 您也可以按照此示例进行操作,它解释了设置我告诉您的内容所需的任何内容:example with global styles【参考方案4】:

从 Next.js 9.2 开始,不再需要使用 next-csswithCSSwithStyle。 Next.js 原生处理 CSS 导入。 由于这些可能伴随 Webpack 问题(请参阅此问题:Having trouble importing CSS in NextJs),这是使用 webpack 配置加载程序的方法。在您的终端中:

npm install file-loader --save-dev
npm install url-loader --save-dev

然后用以下内容替换(或完成)您的 next.config.js 文件:

module.exports = 
    cssModules: true,
    webpack: (config, options) => 
        config.node = 
            fs: "empty",
        ;
        config.module.rules.push(
            use: [
                options.defaultLoaders.babel,
                
                    loader: "url-loader?limit=100000",
                ,
                
                    loader: "file-loader",
                ,
            ],
        );
        return config;
    ,
;

不要忘记删除任何提及withCSSwithStylenext-css,因为它们可能会导致一些错误发生。

【讨论】:

【参考方案5】:

从 Nextjs 9.5.4 开始,您现在可以将 css 文件直接从 node_modules 导入到您需要它的组件中(不需要在 _app.js 中)。就这样

import DatePicker from 'react-datepicker'
import 'react-datepicker/dist/react-datepicker.css'

有关更多信息,请参阅此处的文档 - https://nextjs.org/docs/basic-features/built-in-css-support。一切顺利。

【讨论】:

以上是关于从 Next JS 中的节点模块导入 css 文件?的主要内容,如果未能解决你的问题,请参考以下文章

从 Nuxt.js 与 PhpStorm 中的节点模块解析 SCSS 中的 @import .css

节点模块的 CSS

Next.js - 导入 css 文件不起作用

Next.js 全局 CSS 不能从自定义 <App> 以外的文件导入

如何在下一个 js 中从节点模块外部的文件夹中导入模块

从节点模块直接导入的 CSS 文件奇怪地丢失了