webpack打包CSS

薔薇愛學習發表於2018-10-14

抽離CSS

  • 安裝

    • npm install extract-text-webpack-plugin --save-dev
    • yarn add extract-text-webpack-plugin
  • 配置

var Ex = require('extract-text-webpack-plugin');
// ...省略
module: {
  loaders: [{
    test: /\.less/,
    loader: Ex.extract('style-loader', 'css-loader','less-loader')  // 單獨打包出CSS,這裡配置注意下
  }]
},
plugins: [
  new Ex("【name】.css")
]
複製程式碼

單個頁面單獨打包CSS

即一個應用多個Css檔案

  • 打包一個檔案,只需要常規的在入口的js檔案引用 css檔案即可
  • 打包成多個CSS檔案,可以設定多個CSS入口,讓webpack用 loader去打包。 和分割單獨打包js檔案一樣。
// webpack 3.x 的配置
var path = require('path')
var glob = require('globby')  
var webpack = require('webpack')
var ExtractTextPlugin = require('extract-text-webpack-plugin')

// CSS入口配置
var CSS_PATH = {
  css: {
    pattern: ['./src/**/[^_]*.less', '!./src/old/**/*.less'],
    src: path.join(__dirname, 'src'),
    dst: path.resolve(__dirname, 'static/build/webpack'),
  }
}

// 遍歷除所有需要打包的CSS檔案路徑
function getCSSEntries(config) {
  var fileList = glob.sync(config.pattern)
  return fileList.reduce(function (previous, current) {
    var filePath = path.parse(path.relative(config.src, current))
    var withoutSuffix = path.join(filePath.dir, filePath.name)
    previous[withoutSuffix] = path.resolve(__dirname, current)
    return previous
  }, {})
}

module.exports = [
  {
    devtool: 'cheap-module-eval-source-map',
    context: path.resolve(__dirname),
    entry: getCSSEntries(CSS_PATH.css),
    output: {
      path: CSS_PATH.css.dst,
      filename: '[name].css'
    },
    module: {
      rules: [
        {
          test: /\.less$/,
          use: ExtractTextPlugin.extract({
            use: ['css-loader', 'postcss-loader', 'less-loader']
          })
        }
      ]
    },
    resolve: {
      extensions: ['.less']
    },
    plugins: [
      new ExtractTextPlugin('[name].css'),
    ]
  },
// 如果還需要打包js,則可以在這裡增加一個單獨打包js的處理【根據自己需求來】
// {
//    entry:{},
//    output:{},
//    ... 省略
// }
]
複製程式碼

相關文章