## 本地化安装webpack ##

1. npm init //npm初始化生成package.json文件
2. npm install --save-dev webpack //安装webpack,dev表示安装到开发环境,save表示本地安装
3. 如果是老项目,有package.json文件,直接运行npm i 安装对应的依赖包

## webpack快速打包 ##

webpack src/entery.js dist/bundle.js 
//将entery.js打包到bundle.js
如果有配置文件,直接运行webpack即可

## package.json ##

{
        "name":"webpacktest",
        "version":"1.0.0",
        "description":"test webpack",
        "main":"index.js",
        "scripts":{ //本地npm启动命令:npm run xxxx
            "server":"webpack-dev-server --open",
            //open表示自动打开
            "build":"set type=build&webpack", //node语法,传递参数
            "dev":"set type=dev&webpack" //mac或linux:export type=dev&&webpack
        },
        "author":"tabb",
        "license":"ISC",
        "devDependencies":{  //开发依赖 --save-dev
            "webpack":"^3.6.0",
            "webpack-dev-server":"^2.8.2"
        },
        "dependencies":{  //生产依赖 --save 'npm install --production'(项目上线只安装生成包)
            
        }
    }

## webpack config ##

配置文件webpack.config.js
    const glob=require("glob");  //引入全局控制插件
    const path=require('path'); //引入路径模块
    const uglify=require('uglify-webpack-plugin'); //引入js代码自动压缩模块
    const htmlPlugin=require('html-webpack-plugin'); //引入html打包插件
    const extractTextPlugin=require('extract-text-webpack-plugin'); //引入文件分离插件
    const purifyCSSPlugin=require("purfiycss-webpack"); //引入css冗余删除插件
    const copyWebpackPlugin=require("copy-webpack-plugin"); //引入静态资源处理
    //根据配置传值,打包出不同的根目录,区分生产环境和开发环境
    if(process.env.type="build"){ //node语法
        var website={
            publicPath:"http://tabb.com/"    //设置根路径
        }        
    }else{
        var website={
            publicPath:"http://192.168.0.104/"    //设置根路径
        }    
    }
    var website={
        publicPath:"http://192.168.0.104/"    //设置根路径
    }
    module.exports={
        entry:{ //入口文件路径
            entry1:'./src/entry1.js',
            entry2:'./src/entry2.js',
            jquery:'jquery',
            vue:'vue'
        },
        output:{ //出口文件
            path:path.resolve(__dirname,'dist'),
            filename:'bundle.js' //可写[name],js保持与入口文件名一致
            publicPath:website.publicPath //设置项目引用的公共路径
        },
        module:{
            rules:[ //css打包
                {
                    test:/\.css$/,  //正则匹配对应需要处理的文件
                    use:['style-loader','css-loader']  //添加打包需要使用的功能模块
                    //也可以写成如下形式
                    use:[{
                        loader:'style-loader'
                    },{
                        loader:'css-loader'
                    },
                    "postcss-loader" //css3自动加前缀
                    ],
                    //extract抽离处理
                    use:extractTextPlugin.extract({
                        fallback:"style-loader",
                        use:"css-loader"
                    })                
                },
                {
                    test:/\.(png|jpg|gif)/, //处理图片
                    use:[
                        {
                            loader:'url-loader',
                            boptions:{
                                limit:5000  //设置图片小于多大显示为base64编码
                                outputPath:"images/" //配置图片生成路径
                            }
                        }
                    ]
                },
                { //处理html中image标签引用图片
                    test:/\.(htm|html)$/i,
                    use:['html-withimg-loader']
                },
                { //处理less文件
                    test:/\.(htm|html)$/i,
                    use:[
                        {
                            loader:"style-loader"
                        },{
                            loader:"css-loader"
                        },{
                            loader:"less-loader"
                        }
                    ]                
                },
                { //babel配置
                    test:/\.(jsx|js)$/,
                    use:{
                        loader:"babel-loader",
                        options:{
                            presets:["es2015","react"]
                        }
                    },
                    exclude:/node_modules/                    
                }
            ]
        },
        plugins:[
            new copyWebpackPlugin({ //处理静态资源
                from:__dirname + "/src/public", //静态资源来源
                to:"./public" //默认到dist目录下
            }), 
            new webpack.optimize.CommonsChunkPlugin({ //配置第三方插件抽离打包
                name:['jquery','vue'], //对应入口配置entry中的key
                filename:"assets/js/[name].[ext]", //配置输出路径,可将[ext]改为js,[name]自动匹配配置的名称
                minChunks:2 
            })
            new webpack.ProvidePlugin({
                $:"jquery"
            }),
            new uglify(), //开发环境会报错,因为开发环境代码100%不压缩
            new htmlPlugin({
                minify:{ //配置压缩条件
                    removeAttributeQuotes:true //去除标签中的引号
                },
                hash:true, //给引入的js添加hash,保证加载新文件,防止缓存
                template:'./src/index.html'
            }),
            new extractTextPlugin("/css/index.css"), //指定css分离打包路径
            new purifyCSSPlugin({
                paths:glob.sync(path.join(__dirname,'src/*.html'))  //全局搜索html文件中的dom,找到有效的css
            }),
            new webpack.BannerPlugin("tabb版权所有") //设置打包文件的title注释
        ],
        devServer:{ //开发服务配置,需要安装webpack-dev-server 
            contentBase:path.resolve(__dirname,'dist'), //基本目录结构
            host:'192.168.0.104', //服务器host
            compress:true, //服务器是否启用压缩
            port:1717  //端口
        },
        watchOptions:{  //自动监测watch打包配置
            poll:1000, //监测修改的时间
            aggregeateTimeout:500, //表示500ms内重复按键ctrl+s不进行打包
            ignored:/node_modules/,  //忽略监视项
        }
    }

## babel配置文件,babelrc ##

{
        presets:["env","react"] //env转换es6,es7等
    }

## webpack中的工具安装 ##

1. webpack-dev-server //热更新工具
2. style-loader   //样式处理
3. css-loader   //css文件处理
4. uglify-webpack-plugin  //js自动压缩插件
5. html-webpack-plugin  //html打包插件
6. url-loader  //处理路径
7. file-loader //处理加载文件
8. extract-text-webpack-plugin  //抽离css等文件打包
9. html-withimg-loader  //处理html中使用img标签引用图片
10. less less-loader //less编译
11. sass sass-loader  //sass编译
12. postcss-loader autoprefixer //css3自动添加前缀依赖
13. purify-css purify-webpack  //自动删除css冗余
14. babel-core babel-loader babel-preset-es2015 babel-preset-react babel-preset-env //babel用于编译es6等语法,以及react中的jsx
15. webpack.ProvidePlugin  //统一配置引入插件
16. webpack.optimize.CommonsChunkPlugin //配置第三方插件抽离打包
17. copy-webpack-plugin //静态资源打包

webpack3基础知识的更多相关文章

  1. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  2. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  3. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  4. selenium自动化基础知识

    什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...

  5. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  6. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  7. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  8. [SQL] SQL 基础知识梳理(四) - 数据更新

    SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...

  9. [SQL] SQL 基础知识梳理(五) - 复杂查询

    SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...

随机推荐

  1. gp更新来的太快

    意外总是会发生 添加一个判断function的分支,过滤掉function,其实也考虑再进一步去分析它的作用,稍后再议. 更新一下 var gnp = { get: function(url) { r ...

  2. Entity Framework 数据生成选项DatabaseGenerated【转】

    在EF中,我们建立数据模型的时候,可以给属性配置数据生成选项DatabaseGenerated,它后有三个枚举值:Identity.None和Computed. Identity:自增长 None:不 ...

  3. 面试官常问的10个Linux问题

    1.如何暂停一个正在运行的进程,把其放在后台(不运行)? 为了停止正在运行的进程,让其再后台运行,我们可以使用组合键Ctrl+Z. 2.什么是安装Linux所需的最小分区数量,以及如何查看系统启动信息 ...

  4. javascript对象转为字符串

    function getStringTime(time){ //年 year = time.getFullYear(); //月 month = time.getMonth() if(String(m ...

  5. Hackerrank - [Algo] Matrix Rotation

    https://www.hackerrank.com/challenges/matrix-rotation-algo 又是一道耗了两小时以上的题,做完了才想起来,这不就是几年前在POJ上做过的一个同类 ...

  6. Gradle下载及安装教程

    Gradle是基于Groovy语言的项目自动化建构工具,在使用Gradle之前常用的构建工具有Ant和Maven,使用这些工具我们可以用来管理项目依赖,打包,部署和发布等.使用Gradle我们将需要的 ...

  7. MySQL☞Group By

    分组: group by 列名:根据某一列,把数据分成几组,经常对每一组的数据使用聚合函数,按照我的理解,该列有几种不同的值,那么就把该列分成几组,如下图 简单的来说,第二列中有两个不同的值a和b,那 ...

  8. [Node] Agenda 中文文档 定时任务调度系统[基础篇]

    Agenda简介 使用步骤概述 步骤详述 初始化 定义任务 参数说明: 配置任务 参数说明 设置监听 注意事项 Agenda简介 Agenda是一个定时任务管理模块,它将node中的定时任务存储在数据 ...

  9. Hadoop2.6.0伪分布式搭建

    环境: 1.Ubuntu14.04 首先要在linux系统上新建一个账户,比如就叫做hadoop,用于专门运行hadoop. 2.配置jdk 我是使用的版本是jdk1.8. 解压:创建/usr/jav ...

  10. const在c/c++中的区别

    #include <iostream> using namespace std; int main() { ; ; }; ; i < sizeof array / sizeof *a ...