从Webpack中的“node_modules”导入CSS

时间:2018-03-27 16:40:48

标签: webpack webpack-style-loader css-loader

我正在使用的某些第三方模块有自己的CSS文件。我想将它们包含在我的应用程序的一个单个CSS文件中,该文件由Webpack处理。如何将“node_modules”下的CSS文件导入我的CSS文件?

例如,我正在使用第三方react-select模块,但我无法从node_modules导入其CSS文件:

@import 'react-select/dist/react-datetime.css';

webpack.config.js中的相关加载程序:

  {
    test: /\.css$/,
    use: ExtractTextPlugin.extract({
      use: [
        {
          loader: 'css-loader',
          options: {
            url: false
          }
        }
      ]
    })
  }

3 个答案:

答案 0 :(得分:27)

您可以导入相对于项目根目录的文件(从根文件夹中解析node_modules/,并使用波形符~作为前缀:

@import '~react-select/dist/react-datetime.css';

这是一个记录不完整的Webpack(冗余短语)约定,请参阅https://github.com/webpack-contrib/css-loader/issues/12#issuecomment-41940311What does a `~` tilde in a CSS `url()` do?

答案 1 :(得分:1)

如果您在一个node_modules文件夹中使用了太多东西,则还可以通过传递以下选项来创建别名

options: {
    url: false,
    includePaths: [
        // this one for using node_modules as a base folder
        path.resolve('node_modules'),
        // this one for using sass as the base folder
        path.resolve('node_modules/flag-icon-css/sass')
    ]
}

配置完成后,您可以像在问题中尝试的那样导入。

答案 2 :(得分:0)

我今天有一个类似的问题。毕竟,我要做的就是在Webpack配置文件中configure resolve。我希望这会对某人有所帮助。

我使用的Webpack版本:

"webpack": "^4.37.0",

在webpack配置文件中,应配置以下内容:

module.exports = {
  resolve: {
    extensions: ['.json', '.js', '.jsx'],
    modules: ['node_modules'],
  },

module.exports = {
  resolve: {
    alias: {
      'some-library': path.resolve(__dirname, './node_modules/some-library'),
    }
  },

在CSS文件中,我们可以通过node_modules的相对路径访问库:

@import '~some-library/src/some-css-file';