叉烧店并不卖叉烧

mini-css-extract-plugin

webpack TTT 112℃ 0评论

这个插件将CSS提取出来,单独作为一个文件。它为每一个包含CSS的JS文件创建一个CSS文件。它支持CSS和资源映射的按需加载

它依赖webpack v4的新特性(模块类型),并且需要webpack4才能工作

相比较extract-text-webpack-plugin有以下不同:

  • 异步加载
  • 没有复制编译(执行效率)
  • 更易于使用
  • 特定的CSS

TODO:

  • 支持HMR(Hot Module Replacement)

Install

npm install --save-dev mini-css-extract-plugin

Usage

webpack.config.js

const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
  plugins: [
    new MiniCssExtractPlugin({
      // Options similar to the same options in webpackOptions.output
      // both options are optional
      filename: "[name].css",
      chunkFilename: "[id].css"
    })
  ],
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          {
            loader: MiniCssExtractPlugin.loader,
            options: {
              // you can specify a publicPath here
              // by default it use publicPath in webpackOptions.output
              publicPath: '../'
            }
          },
          "css-loader"
        ]
      }
    ]
  }
}

高级配置示例

这个插件建议只用在生产(production)构建阶段,并且不能把style-loader放在加载链里面(不能同时使用),特别是你在开发阶段使用着HMR。

这里有个例子,可以适应开发环境下启用HMR,和为了在生产环境下可以提取样式到单独一个文件中

(Loaders选项为了清晰进行了简化,可以根据你的需要进行修改

webpack.config.js

const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const devMode = process.env.NODE_ENV !== 'production'
 
module.exports = {
  plugins: [
    new MiniCssExtractPlugin({
      // Options similar to the same options in webpackOptions.output
      // both options are optional
      filename: devMode ? '[name].css' : '[name].[hash].css',
      chunkFilename: devMode ? '[id].css' : '[id].[hash].css',
    })
  ],
  module: {
    rules: [
      {
        test: /\.(sa|sc|c)ss$/,
        use: [
          devMode ? 'style-loader' : MiniCssExtractPlugin.loader,
          'css-loader',
          'postcss-loader',
          'sass-loader',
        ],
      }
    ]
  }
}

转载请注明:叉烧店 » mini-css-extract-plugin

喜欢 (0)
发表我的评论
取消评论

CAPTCHA Image
Reload Image
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址