zoukankan      html  css  js  c++  java
  • webpack01

    在系统性的学习webpack之前,在vue.js中野稍微了解过一点webpack,因为需要用webpack结合vue进行功能的实现。

    当时不是很理解webpack,所以来系统性的学习一下。

    webpack他是一个模块打包工具,主要是来在浏览器中打包JavaScript代码。下面开始我们的webpack学习之旅了。

    安装前先npm初始化

          npm init -y
          npm i webpack webpack-cli -D
    
    

    当然 用yarn 也是可以的 至于要把npm换成yarn就可以了。对了,因为webpack使用nodejs封装完成的,所以用的是nodejs语法。

    let path = require('path')   // 相对路径变绝对路径
    
    module.exports = {
      mode: 'production', // 模式 默认 production development
      entry: './src/index',    // 入口
      output: {
        filename: 'bundle.[hash:8].js',   // hash: 8只显示8位
        path: path.resolve(__dirname, 'dist'),
        publicPath: ''  // // 给所有打包文件引入时加前缀,包括css,js,img,如果只想处理图片可以单独在url-loader配置中加publicPath
      }
    }
    

    这里的path模块需要导入一下let path = require('path')

    本地服务

    npm i webpack-dev-server -D
    
    devServer: {
      port: 3000,
      progress: true          // 滚动条
      contentBase: './build'  // 起服务的地址
      open: true              // 自动打开浏览器
      compress: true         // gzip压缩
    }
    

    复制html

    npm i html-webpack-plugin -D
    
    let HtmlWebpackPlugin = require('html-webpack-plugin')
    plugins: [ // 放着所有webpack插件
      new HtmlWebpackPlugin({ // 用于使用模板打包时生成index.html文件,并且在run dev时会将模板文件也打包到内存中
        template: './index.html', // 模板文件
        filename: 'index.html', // 打包后生成文件
        hash: true, // 添加hash值解决缓存问题
        minify: { // 对打包的html模板进行压缩
          removeAttributeQuotes: true, // 删除属性双引号
          collapseWhitespace: true // 折叠空行变成一行
        }
      })
    ]
    

    为什么要使用这个插件呢?

    1)为html文件中引入的外部资源如script、link动态添加每次compile后的hash,防止引用缓存的外部文件问题

    2)可以生成创建html入口文件,比如单页面可以生成一个html文件入口,配置N个html-webpack-plugin可以生成N个页面入口

    处理css

    npm i css-loader style-loader -D
    
    // css-loader   作用:用来解析@import这种语法
    // style-loader 作用:把 css 插入到head标签中
    // loader的执行顺序: 默认是从右向左(从下向上)
    module: {    // 模块
      rules: [   // 规则
        // style-loader 把css插入head标签中
        // loader 功能单一
        // 多个loader 需要 []
        // 顺便默认从右到左
        // 也可以写成对象方式
        {
          test: /.css$/,   // css 处理
          // use: 'css-loader'
          // use: ['style-loader', 'css-loader'],
          use: [
            // {
            //     loader: 'style-loader',
            //     options: {
            //         insertAt: 'top' // 将css标签插入最顶头  这样可以自定义style不被覆盖
            //     }
            // },
            MiniCssExtractPlugin.loader,
            'css-loader', // css-loader 用来解析@import这种语法,
            'postcss-loader'
          ]
        }
      ]
    }
    

    处理less

    npm i less-loader
    
    {
      test: /.less$/,   // less 处理
      // use: 'css-loader'
      // use: ['style-loader', 'css-loader'],
      use: [
        // {
        //     loader: 'style-loader',
        //     options: {
        //         insertAt: 'top' // 将css标签插入最顶头  这样可以自定义style不被覆盖
        //     }
        // },
        MiniCssExtractPlugin.loader,   // 这样相当于抽离成一个css文件, 如果希望抽离成分别不同的css, 需要再引入MiniCssExtractPlugin,再配置
        'css-loader', // css-loader 用来解析@import这种语法
        'postcss-loader',
        'less-loader' // less-loader less -> css
        // sass node-sass sass-loader
        // stylus stylus-loader
      ]
    }
    

    插件有点多,剩下的慢慢在学习整理。感觉webpack就是要记住比较多的插件和使用方法,但是忘了使用方法也可以去npm上搜索插件使用方法.

  • 相关阅读:
    黑马day01 xml 的解析方式
    Vijos 1164 曹冲养猪(中国剩余定理)
    HDU 2577 How to Type (线性dp)
    Python中的文本(一)
    [LeetCode] Find Minimum in Rotated Sorted Array
    机器学习算法中怎样选取超參数:学习速率、正则项系数、minibatch size
    java网络基本类使用(一)
    java文档注释主要使用方法
    java数组或集合返回空的问题
    tornado web高级开发项目
  • 原文地址:https://www.cnblogs.com/Liovee/p/13208505.html
Copyright © 2011-2022 走看看