• webpack——3.x版本总结


    一、webpack的作用

      1.打包: 把多个javascript文件打包成一个文件,减少http请求,减轻服务器的压力

      2.转换: 把浏览器不能识别的语言转换成javascript,让浏览器能够识别

      3.优化: 优化和提升性能

    二、webpack的安装

      1.npm install -g webpack  //全局安装,一般不推荐

      2.对项目目录进行安装

        新建一个项目

        npm init //初始化项目,生成packge.json文件

        npm install --save-dev webpack  //--save是保存到ppackge.json中,dev是在开发中使用这个包,生产环境中不使用

    三、建立项目基本结构

      在根目录中建立src和dist文件夹

        src文件夹用来存放我们编写的javascript代码——开发环境

        dist文件用来处存放供浏览器读取的文件,及webpack打包成的文件——生产环境

    四、webpack.config.js

      

    const path = require('path'); //webpack.config.js文件中只能用require引入文件
    const uglify = require('uglifyjs-webpack-plugin'); //js压缩插件
    const htmlPlugin = require('html-webpack-plugin'); //打包压缩html文件
    const extractTextPlugin = require("extract-text-webpack-plugin"); //从js中提取css的插件

    module.exports = {   entry: {
        entry: './src/entry.js' //入口文件,entry文件名可以自己取
        entry2: './src/entry2.js' //多入口
      },
      output: {
        path: path.resolve(__dirname,'dist'), //获取项目的绝对路径
        filename: 'bundle.js' //打包的文件名
        filename: '[name].js' //多入口文件时的配置,根据入口文件的名称,打包成相同的名称
      },
      module: {
        rules: [
          {
            test: /.css$/,
            use: [{
              loader:'style-loader'
            },{
              loader:'css-loader'
            }]
          },{
            test: /.(png|jpg|gif)/i,
            use:[{
              loader: 'url-loader',
              options: {
                limit: 50000,
                outputPath: 'images/' //将图片放到指定的文件夹下
              }
            }]
          },{
            test: /.less$/,
            use: {{
              loader: "style-loader"
            },{
              loader: "css-loader"
            },{
              loader: "less-loader" //解析less文件
            }}
          }
        ]
      },
      plugins: [
        new uglify(),
        new
    htmlPlugin({
          minify:{
            removeAttributeQuotes: true, //对HTML文件进行压缩,去掉属性的双引号
            hash: true, //避免缓存js
            template: "./src/index.html" //要打包的html模板路径和文件名称
          }
        }),
        new extractTextPlugin('/css/index.css') //这里的/css/index.css是分离后的路径
        

      ],
      devServer: {
        contentBase: path.resolve(__dirname,'dist'), //配置服务器基本运行路径,用于找到程序打包地址
        host: 'localhost', //服务器的ip地址
        compress: true, //服务器压缩是否开启
        port: 8088 //配置服务端口号
      }
    配置server
     1.npm install webpack-dev-server --save-dev

      2.在package.json中配置 

          "scripts" {
            "server": "webpack-dev-server --open",
            "build": "webpack" //用npm run build 进行打包
           }
    3.在命令行中输入npm run server打开服务器

      entry: 入口文件的配置项,可以是单一入口,可以是多入口
      output: 出口文件的配置项
      module: 模块,主要是解析css和图片转换压缩等功能
      plugins: 配置插件,根据需求配置不同功能的插件
      devServer: 配置开发服务功能
      打包css文件
      1.在entry.js中引入css
      2.npm install style-loader css-loader --save-dev

      css中的图片处理
      cnpm install --save-dev file-loader url-loader //file-loader解决图片的路径问题,url-loader解决图片较多引起的性能问题
      
      css分离extract-text-webpack-plugin
      npm install --save-dev extract-text-webpack-plugin
      
      修改style-loader和css-loader
     {
                  test: /.css$/,
    
    
                  use: extractTextPlugin.extract({
    
    
                    fallback: "style-loader",
    
    
                    use: "css-loader"
    
    
                  })
    
    
                }
      打包less文件
        npm install --save-dev less less-loader
        
        把less文件分离
        {
          test: /.less$/,
          use: extractTextPlugin.extract({
            use: [{
              loader: "css-loader"
            },{
              loader: "less-loader"
            }],
            fallback: "style-loader"
          })
        }
      给css自动添加前缀
      npm install --save-dev postcss-loader autoprefixer
      在项目根目录建立一个postcss.config.js文件
      module.exports = {
        plugins: [
          require('autoprefixer')
        ]
      }
      编写loader
      {
        test: /.css$/,
        use: [
          {
            loader: "style-loader"
          },{
            loader: "css-loader",
            options:{
              modules: true
            }
          },{
            loader: "postcss-loader"
          }
        ]
      }
    配置提取css的loader配置
    {
      test: /.css$/,
      use: extractTextPlugin.extract({
        fallback: 'style-loader',
        use: [
          {loadder: 'css-loader',options: {inportLoaders:1}},
          'postcss-loader'
        ]
      })
     }
    消除未使用的css PurifyCSS
    npm i -D purifycss-webpack purify-css
    const glob = require('glob');
    const PurifyCssPlugin = require('purifycss-webpack');

    plugins: [
      new extractTextPlugin('css/index.css'),
      new PurifyCSSPlugin({
        paths: glob.sync(path.join(__dirname,'src/*.html')) //主要是需找html模板,purifycss根据这个配置会遍历你的文件,查找哪些css被使用了
      }) //使用这个插件必须配合extract-text-webpack-plugin这个插件
    ] 

    es6转换器babel
    npm install --save-dev babel-preset-env
    新建.babelrc文件

      "presets": ["react","env"]

    .webpck.cnfig.js里的loader配置、

      test: /.(jsx|js)$/,
      use: {
        loader:'babel-loader',
      },
      exclude: /node-modules/


    用plugin引入插件
    const webpack = require('webpack');
    plugins: [
      new webpack.ProvidePlugin({
        $:"jquery"
      })
    ]

    watch的配置,保存后同步打包 webpack -watch
    watchOptions:{
      poll: 1000, //检测修改的时间,以毫秒为单位
      aggregateTimeout: 500, //500毫秒内重复保存不进行打包
      ignored: /node_modules/
    }

    BannerPlugin插件,在js文件中加入版权或者开发者声明
    const webpack = reqire('webpack');
    new webpack.BannerPlugin('2018,重新起航');

  • 相关阅读:
    创建型设计模式之-单例
    设计模式(1、创造型2、结构型、3行为型)
    手写IOC容器和两种注入(构造方法注入和属性注入)
    从依赖倒置原则到IOC控制反转
    自定义HttpHandler可以做什么
    一个用户在浏览器上输入网址怎么走到我们写的.net程序中的,请求到管道处理
    代理Nginx
    .Net Expression表达式目录树(自己动态创建表达式目录树)
    canvas绘制圆环进度条
    城市二级联动
  • 原文地址:https://www.cnblogs.com/wangpeiyuan/p/8427990.html
Copyright © 2020-2023  润新知