zoukankan      html  css  js  c++  java
  • webpack3.0

    webpack 前端工程自动化工具   当前版本3.10

    安装 npm install  -g  webpack

    npm install  webpack --save-dev   ||  cnpm install webpack --save-dev

    1. 基本打包  命令 webpack       

    webpack   src/entry.js  dist/bundle.js

    2.入口和出口  

    //ES6输出 dist 绝对路径
    const path = require('path');
    console.log(path.resolve(__dirname,'dist')); 

    配置多入口&多出口

    const path = require('path');
    // path.resolve(__dirname,'dist') 打印dist的绝对路径
    module.exports={
        // 入口文件位置
        entry:{
            entry:'./src/entry.js',
            entry2:'./src/entry2.js'
        },
        // 出口文件位置
        output:{
             path:path.resolve(__dirname,'dist'),
            //name意思 是根据入口文件 打包的名称 打包出对应数量的 出口文件
             filename:'[name].js'
        },
        // 模块:例如 图片CSS less sass typescript 转化压缩
        module:{},
        // 插件,用于生产模块和各项功能
        plugins:[],
        // 配置webpack开发服务功能
        devServer:{}
    }

    3.热更新

    cnpm install webpack-dev-server  --save-dev  安装webpack-dev-server

    修改 package.json    

    "scripts": {
    "server": "webpack-dev-server"
    }
    const path = require('path');
    // path.resolve(__dirname,'dist') 打印dist的绝对路径
    module.exports={
        // 入口文件位置
        entry:{
            entry:'./src/entry.js',
            entry2:'./src/entry2.js'
        },
        // 出口文件位置
        output:{
             path:path.resolve(__dirname,'dist'),
            //name意思 是根据入口文件 打包的名称 打包出对应数量的 出口文件
             filename:'[name].js'
        },
        // 模块:例如 图片CSS less sass typescript 转化压缩
        module:{},
        // 插件,用于生产模块和各项功能
        plugins:[],
        // 配置webpack开发服务功能
        devServer:{
            // 设置基本目录结构
            contentBase:path.resolve(__dirname,'dist'),
            // 服务器的IP地址,可使用IP也可以用localhost
            host:'localhost',
            // 服务器压压缩是否开启 
            compress:true,
            // 配置服务端口号
            port:1717
        }
    }
    npm run server  启动后, 它有一种监控机制(也叫watch)。它可以监控到我们修改源码,并且立即在浏览器里给我们更新

    4.模块:css文件打包

    webpack在生产环境中有一个重要的作用就是减少http的请求数,就是把多个文件打包到一个js里,这样请求数就可以减少好多

    Loaders 是webpack最重要的功能之一,他也是webpack如此盛行的原因,通过使用不通过的loader,webpack可以对不同的文件进行特定的处理

    例如把 sass 转成 css , ES67 转换成ES5 把REACT JSX转换成javascript代码

    css打包 需要 安装两个包

    npm install --save-dev style-loader

    npm install --save-dev css-loader

    //ES6输出 dist 绝对路径
    const path = require('path');
    // path.resolve(__dirname,'dist') 打印dist的绝对路径
    module.exports={
        // 入口文件位置
        entry:{
            entry:'./src/entry.js',
            entry2:'./src/entry2.js'
        },
        // 出口文件位置
        output:{
             path:path.resolve(__dirname,'dist'),
            //name意思 是根据入口文件 打包的名称 打包出对应数量的 出口文件
             filename:'[name].js'
        },
        // 模块:例如 图片CSS less sass typescript 转化压缩
        module:{
            rules:[
                {
                    test:/.css$/,
                    use:['style-loader','css-loader']
                }
            ]
        },
        // 插件,用于生产模块和各项功能
        plugins:[],
        // 配置webpack开发服务功能
        devServer:{
            // 设置基本目录结构
            contentBase:path.resolve(__dirname,'dist'),
            // 服务器的IP地址,可使用IP也可以用localhost
            host:'localhost',
            // 服务器压压缩是否开启 
            compress:true,
            // 配置服务端口号
            port:1717
        }
    }

    5.插件配置 js压缩

    上线前JS需要压缩   webpack集成了一个压缩插件   uglifyjs-webpack-pligin  不需要 再次安装

    引入const uglify = require('uglifyjs-webpack-plugin')

    配置在 plugins:[ new uglify() ]  就可以了

    //ES6输出 dist 绝对路径
    const path = require('path');
    // path.resolve(__dirname,'dist') 打印dist的绝对路径
    //引入uglify
    const uglify = require('uglifyjs-webpack-plugin');
    module.exports={
        // 入口文件位置
        entry:{
            entry:'./src/entry.js',
            entry2:'./src/entry2.js'
        },
        // 出口文件位置
        output:{
             path:path.resolve(__dirname,'dist'),
            //name意思 是根据入口文件 打包的名称 打包出对应数量的 出口文件
             filename:'[name].js'
        },
        // 模块:例如 图片CSS less sass typescript 转化压缩
        module:{
            rules:[
                {
                    test:/.css$/,
                    use:['style-loader','css-loader']
                }
            ]
        },
        // 插件,用于生产模块和各项功能
        plugins:[
            // 配置uglify
            new uglify()
        ],
        // 配置webpack开发服务功能
        devServer:{
            // 设置基本目录结构
            contentBase:path.resolve(__dirname,'dist'),
            // 服务器的IP地址,可使用IP也可以用localhost
            host:'localhost',
            // 服务器压压缩是否开启 
            compress:true,
            // 配置服务端口号
            port:1717
        }
    }

    6.HTML文件的打包

    将src下的index.html打包到dist下 区分生产环境和开发环境

    需要引入 html-webpack-plugin 

    const htmlPlugin = require('html-webpack-plugin')

    配置在plugins里

    new htmlPlugin(

             minify:{

            removeAttributeQuotes:true

    },hash:true,

       template:'./src/index.html'

    )

    //ES6输出 dist 绝对路径
    const path = require('path');
    // path.resolve(__dirname,'dist') 打印dist的绝对路径
    //引入uglify
    const uglify = require('uglifyjs-webpack-plugin');
    // 引入 html-webpack-plugin
    const htmlPlugin = require('html-webpack-plugin');
    module.exports={
        // 入口文件位置
        entry:{
            entry:'./src/entry.js',
            entry2:'./src/entry2.js'
        },
        // 出口文件位置
        output:{
             path:path.resolve(__dirname,'dist'),
            //name意思 是根据入口文件 打包的名称 打包出对应数量的 出口文件
             filename:'[name].js'
        },
        // 模块:例如 图片CSS less sass typescript 转化压缩
        module:{
            rules:[
                {
                    test:/.css$/,
                    use:['style-loader','css-loader']
                }
            ]
        },
        // 插件,用于生产模块和各项功能
        plugins:[
            // 配置uglify
            // new uglify(),
            new htmlPlugin({
                // 对html文件进行压缩 
                minify:{
                    // 去掉属性的双引号
                    removeAttributeQuotes:true
                },
                // 让开发中js有缓存效果,所以加入hash,这样可以有效避免缓存js
                hash:true,
                // 是要打包的html模板路径和文件名称
                template:'./src/index.html'
            })
        ],
        // 配置webpack开发服务功能
        devServer:{
            // 设置基本目录结构
            contentBase:path.resolve(__dirname,'dist'),
            // 服务器的IP地址,可使用IP也可以用localhost
            host:'localhost',
            // 服务器压压缩是否开启 
            compress:true,
            // 配置服务端口号
            port:1717
        }
    }

    7. css中的图片处理 

    webpack 打包图片需要  file-loader&url-loader 

    npm install --save-dev file-loader url-loader

    file-loader

    解决引用路径的问题,拿background样式引入背景图片来说,我们都知道,webpack最终会将各个模块打包成一个文件,因此我们样式的Url路径是相对入口html页面的,而不是相对于原始css文件所在的路径的,这就会导致图片引入失败,这个问题是用file-loader解决的,file-loader可以解析目录中的url引入(不仅限于css)根据我们的配置,将图片拷贝到相应的路径,再根据我们的配置,修改打包后的文件引入路径,使之指向正确的文件

    url-loader

    如果图片较多,会发很多http请求,会价格低页面性能,这个问题可以通过url-loader解决.url-loader会将引入的图片编码,生成dataUrl,相当于把图片数据翻译成一串字符打包到文件中,最终只需要引入这个文件就能访问图片了,当然,如果图片较大,编码会消耗性能。因此url-loader提供了一个limit参数,小于limit字节的文件会被转为DataURL,大于limit的还会使用file-loader进行copy

    {
          // 匹配图片文件后缀名称
          test:/.(png|jpg|gif)/,
          // 是指定使用的loader和loader的配置参数
               use:[{
        loader:'url-loader',
        options:{
        // 小于500000的文件打包成base64的格式写入js
        limit:500
                       }
                    }]
    }
    //ES6输出 dist 绝对路径
    const path = require('path');
    // path.resolve(__dirname,'dist') 打印dist的绝对路径
    //引入uglify
    const uglify = require('uglifyjs-webpack-plugin');
    // 引入 html-webpack-plugin
    const htmlPlugin = require('html-webpack-plugin');
    module.exports={
        // 入口文件位置
        entry:{
            entry:'./src/entry.js',
            entry2:'./src/entry2.js'
        },
        // 出口文件位置
        output:{
             path:path.resolve(__dirname,'dist'),
            //name意思 是根据入口文件 打包的名称 打包出对应数量的 出口文件
             filename:'[name].js'
        },
        // 模块:例如 图片CSS less sass typescript 转化压缩
        module:{
            rules:[
                {
                    test:/.css$/,
                    use:['style-loader','css-loader']
                },{
                    // 匹配图片文件后缀名称
                    test:/.(png|jpg|gif)/,
                    // 是指定使用的loader和loader的配置参数
                    use:[{
                        loader:'url-loader',
                        options:{
                            // 小于500000的文件打包成base64的格式写入js
                            limit:500
                        }
                    }]
                }
            ]
        },
        // 插件,用于生产模块和各项功能
        plugins:[
            // 配置uglify
            // new uglify(),
            new htmlPlugin({
                // 对html文件进行压缩 
                minify:{
                    // 去掉属性的双引号
                    removeAttributeQuotes:true
                },
                // 让开发中js有缓存效果,所以加入hash,这样可以有效避免缓存js
                hash:true,
                // 是要打包的html模板路径和文件名称
                template:'./src/index.html'
            })
        ],
        // 配置webpack开发服务功能
        devServer:{
            // 设置基本目录结构
            contentBase:path.resolve(__dirname,'dist'),
            // 服务器的IP地址,可使用IP也可以用localhost
            host:'localhost',
            // 服务器压压缩是否开启 
            compress:true,
            // 配置服务端口号
            port:1717
        }
    }

    8.图片迈坑:css分离和图片路径处理

    Extract Text Plugin 

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

    const extractTextPlugin = require('extract-text-webpack-plugin')  引入

    new extractTextPlugin('/css/index.css')  配置再 plugin

    publicPath:是在webpack.config.js文件的output选项中,主要作用就是处理静态文件路径的。

    var website ={

        publicPath:"http://192.168.1.108:1717/"
    }

    修改 module:{

            rules: [
                {
                  test: /.css$/,
                  use: extractTextPlugin.extract({
                    fallback: "style-loader",
                    use: "css-loader"
                  })
                },{
                   test:/.(png|jpg|gif)/ ,
                   use:[{
                       loader:'url-loader',
                       options:{
                           limit:500000
                       }
                   }]
                }
              ]
        },
    //ES6输出 dist 绝对路径
    const path = require('path');
    // path.resolve(__dirname,'dist') 打印dist的绝对路径
    //引入uglify
    const uglify = require('uglifyjs-webpack-plugin');
    // 引入 html-webpack-plugin
    const htmlPlugin = require('html-webpack-plugin');
    // 引入 extract-text-webpack-pluguin
    const extractTextPlugin = require("extract-text-webpack-plugin");
    var website ={
        publicPath:"http://192.168.1.9:1717/"
    }
    module.exports={
        // 入口文件位置
        entry:{
            entry:'./src/entry.js',
            entry2:'./src/entry2.js'
        },
        // 出口文件位置
        output:{
             path:path.resolve(__dirname,'dist'),
            //name意思 是根据入口文件 打包的名称 打包出对应数量的 出口文件
             filename:'[name].js',
             publicPath:website.publicPath
        },
        // 模块:例如 图片CSS less sass typescript 转化压缩
        module:{
            rules:[
                {
                  test: /.css$/,
                  use: extractTextPlugin.extract({
                    fallback: "style-loader",
                    use: "css-loader"
                  })
                },{
                    // 匹配图片文件后缀名称
                    test:/.(png|jpg|gif)/,
                    // 是指定使用的loader和loader的配置参数
                    use:[{
                        loader:'url-loader',
                        options:{
                            // 小于500000的文件打包成base64的格式写入js
                            limit:500
                        }
                    }]
                }
            ]
        },
        // 插件,用于生产模块和各项功能
        plugins:[
            // 配置uglify
            // new uglify(),
            new htmlPlugin({
                // 对html文件进行压缩 
                minify:{
                    // 去掉属性的双引号
                    removeAttributeQuotes:true
                },
                // 让开发中js有缓存效果,所以加入hash,这样可以有效避免缓存js
                hash:true,
                // 是要打包的html模板路径和文件名称
                template:'./src/index.html'
            }),new extractTextPlugin('/css/index.css')  
        ],
        // 配置webpack开发服务功能
        devServer:{
            // 设置基本目录结构
            contentBase:path.resolve(__dirname,'dist'),
            // 服务器的IP地址,可使用IP也可以用localhost
            host:'192.168.1.9',
            // 服务器压压缩是否开启 
            compress:true,
            // 配置服务端口号
            port:1717
        }
    }

    9.处理HTML中的图片

    只有项目安装webpack,如何打包?

    "scripts": {

        "server": "webpack-dev-server --open",
        "build":"webpack"
      },

    html-withimg-loader

    npm install html-withimg-loader --save-dev

    {

        test: /.(htm|html)$/i,
         use:[ 'html-withimg-loader']
    }
    //ES6输出 dist 绝对路径
    const path = require('path');
    // path.resolve(__dirname,'dist') 打印dist的绝对路径
    //引入uglify
    const uglify = require('uglifyjs-webpack-plugin');
    // 引入 html-webpack-plugin
    const htmlPlugin = require('html-webpack-plugin');
    // 引入 extract-text-webpack-pluguin
    const extractTextPlugin = require("extract-text-webpack-plugin");
    var website ={
        publicPath:"http://192.168.1.9:1717/"
    }
    module.exports={
        // 入口文件位置
        entry:{
            entry:'./src/entry.js',
            entry2:'./src/entry2.js'
        },
        // 出口文件位置
        output:{
             path:path.resolve(__dirname,'dist'),
            //name意思 是根据入口文件 打包的名称 打包出对应数量的 出口文件
             filename:'[name].js',
             publicPath:website.publicPath
        },
        // 模块:例如 图片CSS less sass typescript 转化压缩
        module:{
            rules:[
                {
                  test: /.css$/,
                  use: extractTextPlugin.extract({
                    fallback: "style-loader",
                    use: "css-loader"
                  })
                },{
                    // 匹配图片文件后缀名称
                    test:/.(png|jpg|gif)/,
                    // 是指定使用的loader和loader的配置参数
                    use:[{
                        loader:'url-loader',
                        options:{
                            // 小于500000的文件打包成base64的格式写入js
                            limit:500,
                            outputPath:'images/'
                        }
                    }]
                },
                {
                    test: /.(htm|html)$/i,
                     use:['html-withimg-loader'] 
                }
            ]
        },
        // 插件,用于生产模块和各项功能
        plugins:[
            // 配置uglify
            // new uglify(),
            new htmlPlugin({
                // 对html文件进行压缩 
                minify:{
                    // 去掉属性的双引号
                    removeAttributeQuotes:true
                },
                // 让开发中js有缓存效果,所以加入hash,这样可以有效避免缓存js
                hash:true,
                // 是要打包的html模板路径和文件名称
                template:'./src/index.html'
            }),new extractTextPlugin('css/index.css')  
        ],
        // 配置webpack开发服务功能
        devServer:{
            // 设置基本目录结构
            contentBase:path.resolve(__dirname,'dist'),
            // 服务器的IP地址,可使用IP也可以用localhost
            host:'192.168.1.9',
            // 服务器压压缩是否开启 
            compress:true,
            // 配置服务端口号
            port:1717
        }
    }

    10.less 打包分离

    npm install --save-dev less

    npm install --save-dev less-loader

    //非css分离写法
    {
        test: /.less$/,
        use: [{
               loader: "style-loader" // creates style nodes from JS strings
            }, {
                loader: "css-loader" // translates CSS into CommonJS
            , {
                loader: "less-loader" // compiles Less to CSS
            }]
    }
    // less 分离写法
    {
                test: /.less$/,
                use: extractTextPlugin.extract({
                    use: [{
                        loader: "css-loader"
                    }, {
                        loader: "less-loader"
                    }],
                    // use style-loader in development
                    fallback: "style-loader"
                })
     }
    //ES6输出 dist 绝对路径
    const path = require('path');
    // path.resolve(__dirname,'dist') 打印dist的绝对路径
    //引入uglify
    const uglify = require('uglifyjs-webpack-plugin');
    // 引入 html-webpack-plugin
    const htmlPlugin = require('html-webpack-plugin');
    // 引入 extract-text-webpack-pluguin
    const extractTextPlugin = require("extract-text-webpack-plugin");
    var website ={
        publicPath:"http://192.168.1.9:1717/"
    }
    module.exports={
        // 入口文件位置
        entry:{
            entry:'./src/entry.js',
            entry2:'./src/entry2.js'
        },
        // 出口文件位置
        output:{
             path:path.resolve(__dirname,'dist'),
            //name意思 是根据入口文件 打包的名称 打包出对应数量的 出口文件
             filename:'[name].js',
             publicPath:website.publicPath
        },
        // 模块:例如 图片CSS less sass typescript 转化压缩
        module:{
            rules:[
                {
                  test: /.css$/,
                  use: extractTextPlugin.extract({
                    fallback: "style-loader",
                    use: "css-loader"
                  })
                },{
                    // 匹配图片文件后缀名称
                    test:/.(png|jpg|gif)/,
                    // 是指定使用的loader和loader的配置参数
                    use:[{
                        loader:'url-loader',
                        options:{
                            // 小于500000的文件打包成base64的格式写入js
                            limit:500,
                            outputPath:'images/'
                        }
                    }]
                },
                {
                    test: /.(htm|html)$/i,
                     use:['html-withimg-loader'] 
                },{
                    test: /.less$/,
                    use: extractTextPlugin.extract({
                        use: [{
                            loader: "css-loader"
                        }, {
                            loader: "less-loader"
                        }],
                        // use style-loader in development
                        fallback: "style-loader"
                    })
                  }
            ]
        },
        // 插件,用于生产模块和各项功能
        plugins:[
            // 配置uglify
            // new uglify(),
            new htmlPlugin({
                // 对html文件进行压缩 
                minify:{
                    // 去掉属性的双引号
                    removeAttributeQuotes:true
                },
                // 让开发中js有缓存效果,所以加入hash,这样可以有效避免缓存js
                hash:true,
                // 是要打包的html模板路径和文件名称
                template:'./src/index.html'
            }),new extractTextPlugin('css/index.css')  
        ],
        // 配置webpack开发服务功能
        devServer:{
            // 设置基本目录结构
            contentBase:path.resolve(__dirname,'dist'),
            // 服务器的IP地址,可使用IP也可以用localhost
            host:'192.168.1.9',
            // 服务器压压缩是否开启 
            compress:true,
            // 配置服务端口号
            port:1717
        }
    }

    11.sass打包分离

    先装node-sass  后装 sass-loader

    后者依赖前者安装

    npm install --save-dev node-sass  

    npm install --save-dev  sass-loader

    //css不拆分写法
    {
                    test: /.scss$/,
                    use: [{
                        loader: "style-loader" // creates style nodes from JS strings
                    }, {
                        loader: "css-loader" // translates CSS into CommonJS
                    }, {
                        loader: "sass-loader" // compiles Sass to CSS
                    }]
    }
    // css拆分写法 
    {
                    test: /.scss$/,
                    use: extractTextPlugin.extract({
                        use: [{
                            loader: "css-loader"
                        }, {
                            loader: "sass-loader"
                        }],
                        // use style-loader in development
                        fallback: "style-loader"
                    })
                }
    //ES6输出 dist 绝对路径
    const path = require('path');
    // path.resolve(__dirname,'dist') 打印dist的绝对路径
    //引入uglify
    const uglify = require('uglifyjs-webpack-plugin');
    // 引入 html-webpack-plugin
    const htmlPlugin = require('html-webpack-plugin');
    // 引入 extract-text-webpack-pluguin
    const extractTextPlugin = require("extract-text-webpack-plugin");
    var website ={
        publicPath:"http://192.168.1.9:1717/"
    }
    module.exports={
        // 入口文件位置
        entry:{
            entry:'./src/entry.js',
            entry2:'./src/entry2.js'
        },
        // 出口文件位置
        output:{
             path:path.resolve(__dirname,'dist'),
            //name意思 是根据入口文件 打包的名称 打包出对应数量的 出口文件
             filename:'[name].js',
             publicPath:website.publicPath
        },
        // 模块:例如 图片CSS less sass typescript 转化压缩
        module:{
            rules:[
                {
                  test: /.css$/,
                  use: extractTextPlugin.extract({
                    fallback: "style-loader",
                    use: "css-loader"
                  })
                },{
                    // 匹配图片文件后缀名称
                    test:/.(png|jpg|gif)/,
                    // 是指定使用的loader和loader的配置参数
                    use:[{
                        loader:'url-loader',
                        options:{
                            // 小于500000的文件打包成base64的格式写入js
                            limit:500,
                            outputPath:'images/'
                        }
                    }]
                },
                {
                    test: /.(htm|html)$/i,
                     use:['html-withimg-loader'] 
                },{
                    test: /.less$/,
                    use: extractTextPlugin.extract({
                        use: [{
                            loader: "css-loader"
                        }, {
                            loader: "less-loader"
                        }],
                        // use style-loader in development
                        fallback: "style-loader"
                    })
                  },
                  {
                    test: /.scss$/,
                    use: extractTextPlugin.extract({
                        use: [{
                            loader: "css-loader"
                        }, {
                            loader: "sass-loader"
                        }],
                        // use style-loader in development
                        fallback: "style-loader"
                    })
                }
            ]
        },
        // 插件,用于生产模块和各项功能
        plugins:[
            // 配置uglify
            // new uglify(),
            new htmlPlugin({
                // 对html文件进行压缩 
                minify:{
                    // 去掉属性的双引号
                    removeAttributeQuotes:true
                },
                // 让开发中js有缓存效果,所以加入hash,这样可以有效避免缓存js
                hash:true,
                // 是要打包的html模板路径和文件名称
                template:'./src/index.html'
            }),new extractTextPlugin('css/index.css')  
        ],
        // 配置webpack开发服务功能
        devServer:{
            // 设置基本目录结构
            contentBase:path.resolve(__dirname,'dist'),
            // 服务器的IP地址,可使用IP也可以用localhost
            host:'192.168.1.9',
            // 服务器压压缩是否开启 
            compress:true,
            // 配置服务端口号
            port:1717
        }
    }

    12.postCss

    npm install --save-dev postcss-loader autoprefixer

    同级下建立

    #test{
         100px;
        height: 100px;
        background: rebeccapurple;
        transform: rotate(45deg);   
    }
    //建立postcss.config.js 文件 配置如下
    module.exports={ plugins:[ require('autoprefixer') ] }
     {
                    test: /.css$/,
                    use: extractTextPlugin.extract({
                        fallback: 'style-loader',
                        use: [
                            { loader: 'css-loader', options: { importLoaders: 1 } },
                            'postcss-loader'
                        ]
                    })
                    
    } 
    //ES6输出 dist 绝对路径
    const path = require('path');
    // path.resolve(__dirname,'dist') 打印dist的绝对路径
    //引入uglify
    const uglify = require('uglifyjs-webpack-plugin');
    // 引入 html-webpack-plugin
    const htmlPlugin = require('html-webpack-plugin');
    // 引入 extract-text-webpack-pluguin
    const extractTextPlugin = require("extract-text-webpack-plugin");
    var website ={
        publicPath:"http://192.168.1.9:1717/"
    }
    module.exports={
        // 入口文件位置
        entry:{
            entry:'./src/entry.js',
            entry2:'./src/entry2.js'
        },
        // 出口文件位置
        output:{
             path:path.resolve(__dirname,'dist'),
            //name意思 是根据入口文件 打包的名称 打包出对应数量的 出口文件
             filename:'[name].js',
             publicPath:website.publicPath
        },
        // 模块:例如 图片CSS less sass typescript 转化压缩
        module:{
            rules:[
                {
                    test: /.css$/,
                    use: extractTextPlugin.extract({
                        fallback: 'style-loader',
                        use: [
                            { loader: 'css-loader', options: { importLoaders: 1 } },
                            'postcss-loader'
                        ]
                    })
                    
                } ,
               {
                    // 匹配图片文件后缀名称
                    test:/.(png|jpg|gif)/,
                    // 是指定使用的loader和loader的配置参数
                    use:[{
                        loader:'url-loader',
                        options:{
                            // 小于500000的文件打包成base64的格式写入js
                            limit:500,
                            outputPath:'images/'
                        }
                    }]
                },
                {
                    test: /.(htm|html)$/i,
                     use:['html-withimg-loader'] 
                },{
                    test: /.less$/,
                    use: extractTextPlugin.extract({
                        use: [{
                            loader: "css-loader"
                        }, {
                            loader: "less-loader"
                        }],
                        // use style-loader in development
                        fallback: "style-loader"
                    })
                  },
                  {
                    test: /.scss$/,
                    use: extractTextPlugin.extract({
                        use: [{
                            loader: "css-loader"
                        }, {
                            loader: "sass-loader"
                        }],
                        // use style-loader in development
                        fallback: "style-loader"
                    })
                }
            ]
        },
        // 插件,用于生产模块和各项功能
        plugins:[
            // 配置uglify
            // new uglify(),
            new htmlPlugin({
                // 对html文件进行压缩 
                minify:{
                    // 去掉属性的双引号
                    removeAttributeQuotes:true
                },
                // 让开发中js有缓存效果,所以加入hash,这样可以有效避免缓存js
                hash:true,
                // 是要打包的html模板路径和文件名称
                template:'./src/index.html'
            }),new extractTextPlugin('css/index.css')  
        ],
        // 配置webpack开发服务功能
        devServer:{
            // 设置基本目录结构
            contentBase:path.resolve(__dirname,'dist'),
            // 服务器的IP地址,可使用IP也可以用localhost
            host:'192.168.1.9',
            // 服务器压压缩是否开启 
            compress:true,
            // 配置服务端口号
            port:1717
        }
    }

    13. 消除无用的css

    PurifyCSS

    使用PurifyCSS可以大大减少CSS冗余,比如我们经常使用的BootStrap(140KB)就可以减少到只有35KB大小。这在实际开发当中是非常有用的。

    安装PurifyCSS-webpack

    从名字你就可以看出这是一个插件,而不是loader。所以这个需要安装还需要引入。 PurifyCSS-webpack要以来于purify-css这个包,所以这两个都需要安装。

    这里的-D代表的是–save-dev ,只是一个简写。

    引入glob

    因为我们需要同步检查html模板,所以我们需要引入node的glob对象使用。在webpack.config.js文件头部引入glob。

    const glob = require('glob');

    引入purifycss-webpack

    同样在webpack.config.js文件头部引入purifycss-webpack

    const PurifyCSSPlugin = require("purifycss-webpack");

    plugins:[
        //new uglify() 
        new htmlPlugin({
            minify:{
                removeAttrubuteQuotes:true
            },
            hash:true,
            template:'./src/index.html'
            
        }),
        new extractTextPlugin("css/index.css"),
        new PurifyCSSPlugin({
            // Give paths to parse for rules. These should be absolute!
            paths: glob.sync(path.join(__dirname, 'src/*.html')),
            })
     
    ]
    //ES6输出 dist 绝对路径
    const path = require('path');
    // path.resolve(__dirname,'dist') 打印dist的绝对路径
    //引入uglify
    const uglify = require('uglifyjs-webpack-plugin');
    // 引入 html-webpack-plugin
    const htmlPlugin = require('html-webpack-plugin');
    // 引入 extract-text-webpack-pluguin
    const extractTextPlugin = require("extract-text-webpack-plugin");
    const glob = require('glob');
    const PurifyCSSPlugin = require("purifycss-webpack");
    var website ={
        publicPath:"http://192.168.1.9:1717/"
    }
    module.exports={
        // 入口文件位置
        entry:{
            entry:'./src/entry.js',
            entry2:'./src/entry2.js'
        },
        // 出口文件位置
        output:{
             path:path.resolve(__dirname,'dist'),
            //name意思 是根据入口文件 打包的名称 打包出对应数量的 出口文件
             filename:'[name].js',
             publicPath:website.publicPath
        },
        // 模块:例如 图片CSS less sass typescript 转化压缩
        module:{
            rules:[
                {
                    test: /.css$/,
                    use: extractTextPlugin.extract({
                        fallback: 'style-loader',
                        use: [
                            { loader: 'css-loader', options: { importLoaders: 1 } },
                            'postcss-loader'
                        ]
                    })
                    
                } ,
               {
                    // 匹配图片文件后缀名称
                    test:/.(png|jpg|gif)/,
                    // 是指定使用的loader和loader的配置参数
                    use:[{
                        loader:'url-loader',
                        options:{
                            // 小于500000的文件打包成base64的格式写入js
                            limit:500,
                            outputPath:'images/'
                        }
                    }]
                },
                {
                    test: /.(htm|html)$/i,
                     use:['html-withimg-loader'] 
                },{
                    test: /.less$/,
                    use: extractTextPlugin.extract({
                        use: [{
                            loader: "css-loader"
                        }, {
                            loader: "less-loader"
                        }],
                        // use style-loader in development
                        fallback: "style-loader"
                    })
                  },
                  {
                    test: /.scss$/,
                    use: extractTextPlugin.extract({
                        use: [{
                            loader: "css-loader"
                        }, {
                            loader: "sass-loader"
                        }],
                        // use style-loader in development
                        fallback: "style-loader"
                    })
                }
            ]
        },
        // 插件,用于生产模块和各项功能
        plugins:[
            // 配置uglify
            // new uglify(),
            new htmlPlugin({
                // 对html文件进行压缩 
                minify:{
                    // 去掉属性的双引号
                    removeAttributeQuotes:true
                },
                // 让开发中js有缓存效果,所以加入hash,这样可以有效避免缓存js
                hash:true,
                // 是要打包的html模板路径和文件名称
                template:'./src/index.html'
            }),
            new extractTextPlugin('css/index.css'),
            new PurifyCSSPlugin({
                // Give paths to parse for rules. These should be absolute!
                paths: glob.sync(path.join(__dirname, 'src/*.html')),
                })  
        ],
        // 配置webpack开发服务功能
        devServer:{
            // 设置基本目录结构
            contentBase:path.resolve(__dirname,'dist'),
            // 服务器的IP地址,可使用IP也可以用localhost
            host:'192.168.1.9',
            // 服务器压压缩是否开启 
            compress:true,
            // 配置服务端口号
            port:1717
        }
    }

    14. babel 转es6

  • 相关阅读:
    【开源】使用Angular9和TypeScript开发RPG游戏
    [开源]开放域实体抽取泛用工具 NetCore2.1
    【开源】C#信息抽取系统【招募C#队友】
    自然语言处理真实项目实战(20170830)
    自然语言处理真实项目实战(20170822)
    智慧航空AI大赛-阿里云算法大赛总结 第一赛季总结
    iOS11和机器学习CoreML库
    [不定期更新长文]卷积神经网络工作原理研究
    微服务SpringCloud之GateWay熔断、限流、重试
    微服务SpringCloud之GateWay服务化和过滤器
  • 原文地址:https://www.cnblogs.com/zzzzzzzsy/p/8285590.html
Copyright © 2011-2022 走看看