美文网首页
webpack学习

webpack学习

作者: 王逵_e9b3 | 来源:发表于2018-12-25 20:12 被阅读0次

    Webpack小结

    什么是webpack

    • 一个打包工具,把各种各样的文件打包成一个JS文件,或者是把一些小图打包到大图里面。

    • 可以处理js,jade,css,less,scss等文件

    为什么要使用webpack

    • 模块化——前端越来越复杂,将代码划分到不同的模块中,将模块打包成一个或几个

    • 优化加载速度——压缩代码

    • 使用新的开发模式——使用ES6,转换代码

    webpack特点

    • 同时支持commonjs和amd

    • 一切都可以打包

    • 分模块打包

    简单示例

    entry:入口

    output:打包出来的文件路径和文件名

    module:对应模块

    使用了webpack后可以使用require()

    module.exports = {
        //文件入口
        entry: './index.js',
        output: {  //打包出口的配置
            path: __dirname,//文件路径
            filename: 'bundle.js'//文件名
        },
        //模块
        module: {
            //读取某些类型的文件时需要预先处理
            loaders: [{
                test: /\.css$/,  //正则,匹配对应的文件名
                loaders: ['style-loader', 'css-loader']  //如何处理,一般使用三方,执行顺序从右到左,css-loader处理css文件,style-loader将处理的文件挂在到页面上
            }]
        }
    };
    

    多入口示例

    var path = require('path'); //webpack自带
    
    var config = {
      entry: {
        admin: './admin/index.js',  //管理界面入口
        consumer: './consumer/index.js' //用户界面入口
      },
      output: {
        path: path.join(__dirname, 'dist'), //打包的文件路径和文件名
        publicPath: '/dist/',               //从哪一个url获取公共文件
        filename: '[name].bundle.js'        //name读取entry中的key
      }
    };
    
    module.exports = config;
    

    启动webpack 的hot-reload

    在package中的scripts加入start命令

    便可用npm run start启动

    {
      "name": "demo2",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "start": "webpack-dev-server --progress --colors --hot --inline",
      },
    }
    
    

    webpack的plugin

    修改webpack底层的配置api,可以定制优化webpack的配置

    var path = require('path'); //webpack自带
    var webpack = require('webpack')
    
    var config = {
      entry: {
        admin: './admin/index.js',  //管理界面入口
        consumer: './consumer/index.js' //用户界面入口
      },
      output: {
        path: path.join(__dirname, 'dist'), //打包的文件路径和文件名
        publicPath: '/dist/',               //从哪一个url获取公共文件
        filename: '[name].bundle.js'        //name读取entry中的key
      },
        plugins:[
             new webpack.optimize.UglifyJsPlugin()  //压缩代码
        ]
    };
    
    module.exports = config;
    

    webpack的module设置

    var path = require('path');
    var webpack = require('webpack');
    
    var env = process.env.NODE_ENV;
    var config = {
      entry: {
        admin: './admin/index.js',
        consumer: './consumer/index.js'
      },
      output: {
        path: path.join(__dirname, 'dist'),
        publicPath: '/dist/',
        filename: '[name].bundle.js'
      },
      plugins: [],
      module: {
        noParse: [/jquery/],    //不对该文件进行额外的压缩打包,加快打包时间
        loaders: [{
          test: /\/images\//,  //针对所有含有/images/的文件
          loader: 'file'     //加载文件的loader
        }, {
          test: /\/icons\//,  //针对所有含有/icons/的文件
          loader: 'url'       //变为base64图片
        }, {
          test: /\.js$/,        //针对所有的js文件
          exclude: /node_modules/,  //排除node_modules文件
          include: __dirname,   //只对当前打包
          loader: 'babel'       //使用babel
        }, {
          test: /\.scss$/,      //后缀名为.scss的文件
          loader: 'style!css!sass'  //从右往左运行,
        }]
      }
    };
    if (env === 'production') {
      config.plugins = config.plugins.concat(
        new webpack.optimize.UglifyJsPlugin({   //压缩文件
          compress: {
            warnings: false         //去除warning
          }
        }),
        new webpack.optimize.OccurenceOrderPlugin()     //优化boundle的id使其更小
      );
    }
    
    module.exports = config;
    

    相关文章

      网友评论

          本文标题:webpack学习

          本文链接:https://www.haomeiwen.com/subject/zjjqlqtx.html