使用webpack + css组件时导入供应商css

syk*_*yko 9 css webpack css-modules

我正在尝试使用像-tres基础的东西与React和css模块,但我无法弄清楚如何正确地将它们导入我的项目.

请注意,我正在使用HotModuleReplacementPluginExtractTextPlugin获取单个css文件.

在顶级组件的css文件中的某个地方,我希望能够做到,@import 'font-awesome';但我怎么能这样做,以便文件将按原样处理,并且类不会最终本地化为font_awesome__fa-check这样的?

这是我的webpack配置:

var paths = {
  app: path.join(__dirname, './app/'),
  dist: path.join(__dirname, './dist/'),
  external: path.join(__dirname, './node_modules/'),
}
module.exports = {
  entry: {
    site: [
      'webpack-dev-server/client?http://localhost:5000',
      'webpack/hot/dev-server',
      path.join(paths.app, '/index.js'),
    ]
  },
  output: {
    path: paths.dist,
    publicPath: '/',
    filename: 'scripts/[name].[hash].js',
    chunkFilename: '[name].[chunkhash].js'
  },
  resolve: {
    extensions: ['', '.js'],
    root: paths.app,
    alias: {
      'font-awesome.css': path.join(paths.external, '/font-awesome/css/font-awesome.min.css')
    }
  },
  module: {
    loaders: [
      {
        test: /\.jsx?$/,
        loaders: ['babel'],
        include: path.join(__dirname, 'app')
      },
      {
        test: /\.css$/,
        loader: ExtractTextPlugin.extract('style-loader', 'css-loader?modules&localIdentName=[name]__[local]&importLoaders=1', 'postcss-loader')
      }
    ]
  },
  postcss: [
    require('autoprefixer-core'),
  ],
  devtool: 'inline-source-map',
  plugins: [
    new webpack.HotModuleReplacementPlugin(),
    new webpack.NoErrorsPlugin(),
    new ExtractTextPlugin("styles/[name].[chunkhash].css", {allChunks: true}),
    new HtmlWebpackPlugin({
      template: path.join(paths.app, '/site.html'),
      filename: 'index.html',
      inject: 'body',
      chunks: ['site']
    }),
  ]
};
Run Code Online (Sandbox Code Playgroud)

谢谢.

lan*_*nan 10

您可以在配置加载器时利用include/exclude选项.

例如,假设您的所有自定义css都在/app/目录中的某个位置,而基础和字体非常棒.

...
module: {
    loaders: [

      {
        test: /\.css$/,
        loader: ExtractTextPlugin.extract('style-loader', 'css-loader?modules&localIdentName=[name]__[local]&importLoaders=1', 'postcss-loader'),
        include: path.join(__dirname, 'app')
      },
      {
        test: /\.css$/,
        loader: ExtractTextPlugin.extract('style-loader!css-loader'),
        exclude: path.join(__dirname, 'app')
      }
    ]
},
Run Code Online (Sandbox Code Playgroud)

另一种选择是对使用css-modules语法的文件使用不同的扩展名.你可以用.mcss.

...
module: {
    loaders: [
      {
        test: /\.mcss$/,
        loader: 'css-loader?modules&localIdentName=[name]__[local]&importLoaders=1'
      },
      {
        test: /\.css$/,
        loader: 'css-loader')
      }
    ],
    postLoaders: [
        {
            test: /\.(css|mcss)$/,
            loader: ExtractTextPlugin.extract('style-loader')
        }
    ]
},
Run Code Online (Sandbox Code Playgroud)

  • 大!这确实有效.请注意,我必须要求来自js的外部css.从css模块导入它仍然会使它全部本地化.谢谢 (2认同)