webpack - CSS篇

webpack.config.js

var webpack = require('webpack');
var path = require('path');
var ExtractTextWebpackPlugin = require('extract-text-webpack-plugin');
var UglifyJsPlugin = require('uglifyjs-webpack-plugin');
var PurifyCss = require('purifycss-webpack');
var glob = require('glob-all');   



module.exports = {
    entry: {
        'app':"./src/app.js"
    },
      
    output: {
        path: path.resolve(__dirname,"./dist"),//所有输出文件的目标路径。必须是绝对路径(使用 Node.js 的 path 模块)
        publicPath:'dist/',    //项目引入资源路径。输出文件解析之后的目录,url 相对于 HTML 页面
        filename: "[name].bundle.js",   //初始化打包后输出文件的文件名
        chunkFilename:"[name].bundle.js"    //动态打包后输出文件的文件名
    },
    
    module:{
        rules:[
            {
                test:/\.less$/,

                use:ExtractTextWebpackPlugin.extract({
                    fallback:{
                        loader:'style-loader',
                        options:{
                            insertInto:'#app',  //插入到dom
                            singleton:true,      //是否只使用一个style标签
                            transform:'./css.transform.js'  //转化,浏览器环境下,插入页面前
                            // insertAt    //插入的位置
                        }
                    },
                    use:[
                        {
                            // css-loader
                            //     options
                            //         alias  (解析的别名)
                            //         inportLoader  (@import)
                            //         Minimize   (是否压缩)
                            //         modules     (是否启用css-modules)
        
                            // css-modules
                            //     :local  给定一个本地的,局部的样式
                            //     :global 给定一个全局的样式
                            //     compose 可以继承一段样式
                            //     compose ... from path   从别的文件中引入样式
                            loader:'css-loader'
                            // options:{
                            //     minimize:true
                            // }
                            // loader:'file-loader'
                        },
                        {
                            loader:'postcss-loader',    //这个要放在css-loader和less-loader之间   
                            options:{
                                ident:'postcss',
                                plugins:[
                                    require('autoprefixer')(),   //可以在这里引入,也可以在上面引入
                                    require('postcss-cssnext')()
                                ]
                            }
                        },
                        {
                            loader:'less-loader'
                        }
                    ]
                })
                
            },
            {
                test:/\.(png|jpg|jpeg|gif)$/,
                use:[
                    {
                        loader:'url-loader',
                        options:{
                            limit:1000,                // 表示小于50kb的图片转为base64,大于50kb的是路径
                            name:'[name].[ext]',        //输出图片的原名
                            publicPath:'assets/imgs/',  //将文件打包到dist文件的assets/imgs/中
                            outputPath:'assets/imgs/'   //将文件打包到dist文件的assets/imgs/中
                        }
                    },
                    {
                        loader: 'img-loader',
                        options: {
                          plugins: [
                            require('imagemin-pngquant')({
                              quality: '80' // 图片压缩率
                            })
                          ]
                        }
                      }
                ]
            }
        ],
    },

    //Tree Shaking
    optimization: {
        minimizer: [
            new UglifyJsPlugin()
        ]
    },

    plugins:[
        new ExtractTextWebpackPlugin({
            filename:'[name].min.css',   //提取后css文件名
            allChunks:false
        }),
        new PurifyCss({
            paths:glob.sync([
                path.join(__dirname,'./*.html'),
                path.join(__dirname,'./src/*.js')
            ])
        })
    ]
}

二,配置Less - Sass
安装插件

npm install less node-sass  sass-loader less-loader --save-dev

webpack.config.js
module:{
    rules:[
        {
            test:/\.less$/,
            use:[
                {
                    loader:'less-loader'    //配置less
                }
            ]
            
        }
    ]
}

三,提取CSS
1,extract-loader
2,ExtractTextWebpackPlugin 主流

安装插件

npm install extract-text-webpack-plugin --save-dev

// webpack.config.js
var ExtractTextWebpackPlugin = require('extract-text-webpack-plugin');
module:{
        rules:[
            {
                test:/\.less$/,
                use:ExtractTextWebpackPlugin.extract({
                    fallback:{
                        loader:'style-loader',
                        options:{
                            insertInto:'#app',  //插入到dom
                            singleton:true,      //是否只使用一个style标签
                            transform:'./css.transform.js'  //转化,浏览器环境下,插入页面前

                            // insertAt    //插入的位置
                        }
                    },
                    use:[
                        {
                            loader:'css-loader',
                        },
                        {
                            loader:'less-loader'
                        }
                    ]
                })               
            }
        ]
    },
    plugins:[
        new ExtractTextWebpackPlugin({
            filename:'[name].min.css'   //提取后css文件名
        })
    ]
}

四,PostCSS

PostCSS 是一个允许使用 JS 插件转换样式的工具。 这些插件可以检查(lint)你的 CSS,支持 CSS Variables 和 Mixins, 编译尚未被浏览器广泛支持的先进的 CSS 语法,内联图片,以及其它很多优秀的功能。PostCSS 的 Autoprefixer 插件是最流行的 CSS 处理工具之一。
地址:https://github.com/postcss/postcss/blob/HEAD/README-cn.md

本次学习需要安装的插件:postcss postcss-loader autoprefixer cssnano postcss-cssnext

Autoprefixer:autoprefixer是一款自动管理浏览器前缀的插件,它可以解析CSS文件并且添加浏览器前缀到CSS内容里,使用Can I Use(caniuse网站)的数据来决定哪些前缀是需要的。
a{
display:flex;
}
//可以将上面的代码转换成下面这样,使各个浏览器都能识别。
a{
display:-webkit-box;
display:-webkit-flex;
display:-ms-flexbox;
display:flex;
}

CSS-nano:cssnano是一个在PostCSS生态系统之上编写的现代模块化压缩工具,它允许我们使用许多强大的功能来适当地压缩CSS。

CSS-next:cssnext是一个CSS转换器,允许您使用最新的CSS语法。它将CSS规范转换为更兼容的CSS,因此您无需等待浏览器支持。也可以说是现在可以使用未来会出现的css语法。

npm install postcss postcss-loader autoprefixer cssnano postcss-cssnext --save-dev

webpack.config.js    
module:{
    rules:[
        {
            test:/\.less$/,
                use:[
                    {	
                        loader:'postcss-loader',    	//autoprefixer的使用
                        options:{
                            ident:'postcss',
                            plugins:[
                                require('autoprefixer')(),   //可以在这里引入,也可以在上面引入
                                require('postcss-cssnext')()
                            ]
                        }
                    }
                ]             
	      }
	]
}

Browserslist
Browserslist:浏览器兼容,配置哪些浏览器兼容
可以让所有的插件公用方案:
package.json
.broswerslist

package.json

"browserslist":[
	">= 1%",
	"last 2 versions"
]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值