首页 > 其他分享 >webpack4

webpack4

时间:2023-05-26 17:25:52浏览次数:33  
标签:npm webpack4 js webpack html loader css

webpack4

webpack 是一种前端资源构建工具,一个静态模块打包器(module bundler)。在 webpack 看来, 前端的所有资源文件(js/json/css/img/less/...)都会作为模块处理。它将根据模块的依赖关系进行静态分析,打包生成对应的静态资源(bundle)。

使用

  • 初始化 package.json
    npm init
  • 下载并安装 webpack
npm install webpack webpack-cli -g
npm install webpack webpack-cli -D

开发环境指令:webpack src/js/index.js -o build/js/built.js --mode=development
功能:webpack 能够编译打包 js 和 json 文件,并且能将 es6 的模块化语法转换成浏览器能识别的语法。
生产环境指令:webpack src/js/index.js -o build/js/built.js --mode=production
功能:在开发配置功能上多一个功能,压缩代码。

  • 问题
    不能编译打包 css、img 等文件。
    不能将 js 的 es6 基本语法转化为 es5 以下语法。

开发环境的基本配置

打包样式资源

  • 下载安装 loader 包
    npm i css-loader style-loader less-loader less -D
  • 修改配置文件
module: {
  rules: [
    // 详细 loader 配置
    // 不同文件必须配置不同 loader 处理
    {
      // 匹配哪些文件
      test: /\.css$/,
      // 使用哪些 loader 进行处理
      use: [
        // use 数组中 loader 执行顺序:从右到左,从下到上 依次执行
        // 创建 style 标签,将 js 中的样式资源插入进行,添加到 head 中生效
        'style-loader',
        // 将 css 文件变成 commonjs 模块加载 js 中,里面内容是样式字符串
        'css-loader'
      ]
    }
  ]
},

打包 HTML 资源

  • 下载安装 plugin 包
    npm install --save-dev html-webpack-plugin
  • 修改配置文件
plugins: [
  // plugins 的配置
  // html-webpack-plugin
  // 功能:默认会创建一个空的 HTML,自动引入打包输出的所有资源(JS/CSS)
  // 需求:需要有结构的 HTML 文件
  new HtmlWebpackPlugin({
    // 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)
    template: './src/index.html'
  })
],

打包图片资源

  • 下载安装 loader 包
    npm install --save-dev html-loader url-loader file-loader
  • 修改配置文件
module: {
rules: [
    {
      // 问题:默认处理不了 html 中 img 图片
      // 处理图片资源
      test: /\.(jpg|png|gif)$/,
      // 使用一个 loader
      // 下载 url-loader file-loader
      loader: 'url-loader',
      options: {
        // 图片大小小于 8kb,就会被 base64 处理
        // 优点: 减少请求数量(减轻服务器压力)
        // 缺点:图片体积会更大(文件请求速度更慢)
        limit: 8 * 1024,
        // 问题:因为 url-loader 默认使用 es6 模块化解析,而 html-loader 引入图片是 commonjs
        // 解析时会出问题:[object Module]
        // 解决:关闭 url-loader 的 es6 模块化,使用 commonjs 解析
        esModule: false,
        // 给图片进行重命名
        // [hash:10]取图片的 hash 的前 10 位
        // [ext]取文件原来扩展名
        name: '[hash:10].[ext]'
      }
    },
    {
      test: /\.html$/,
      // 处理 html 文件的 img 图片(负责引入 img,从而能被 url-loader 进行处理)
      loader: 'html-loader'
    }
  ]
},

打包其他资源

module: {
  rules: [
    // 打包其他资源(除了 html/js/css 资源以外的资源)
    {
      // 排除 css/js/html 资源
      exclude: /\.(css|js|html|less)$/,
      loader: 'file-loader',
      options: {
        name: '[hash:10].[ext]'
      }
    }
  ]
}

devserver

devServer: {
  // 项目构建后路径
  contentBase: resolve(__dirname, 'build'),
  // 启动 gzip 压缩
  compress: true,
  // 端口号
  port: 3000,
  // 自动打开浏览器
  open: true
}

运行指令: npx webpack-dev-server

生产环境的基本配置

提取 css 成单独文件

  • 下载插件
    npm install --save-dev mini-css-extract-plugin
  • 修改配置文件
module: {
  rules: [
    {
      test: /\.css$/,
      use: [
        // 创建 style 标签,将样式放入
        // 'style-loader',
        // 这个 loader 取代 style-loader。作用:提取 js 中的 css 成单独文件
        MiniCssExtractPlugin.loader,
        // 将 css 文件整合到 js 文件中
        'css-loader'
      ]
    }
  ]
},
plugins: [
  new MiniCssExtractPlugin({
    // 对输出的 css 文件进行重命名
    filename: 'css/built.css'
  })
]

css 兼容性处理

  • 下载 loader
    npm install --save-dev postcss-loader postcss-preset-env
  • 修改配置文件
module: {
  rules: [
    {
      test: /\.css$/,
      use: [
        MiniCssExtractPlugin.loader,
        'css-loader',
        {
          loader: 'postcss-loader',
          options: {
          ident: 'postcss',
          plugins: () => [
              // postcss 的插件
              require('postcss-preset-env')()
            ]
          }
        }
      ] 
    }
  ]
},
  • 修改 package.json
"browserslist": {
  "development": [
    "last 1 chrome version",
    "last 1 firefox version",
    "last 1 safari version"
  ],
  "production": [
    ">0.2%",
    "not dead",
    "not op_mini all"
  ]
}

压缩 css

  • 下载安装包
    npm install --save-dev optimize-css-assets-webpack-plugin
  • 修改配置文件
plugins: [
  // 压缩 css
  new OptimizeCssAssetsWebpackPlugin()
]

js 语法检查

  • 下载安装包
    npm install --save-dev eslint-loader eslint eslint-config-airbnb-base eslint-plugin-import
  • 修改配置文件
module: {
  rules: [
    /*
    注意:只检查自己写的源代码,第三方的库是不用检查的
    airbnb --> eslint-config-airbnb-base eslint-plugin-import eslint
    */
    {
      test: /\.js$/,
      exclude: /node_modules/,
      loader: 'eslint-loader',
      options: {
        // 自动修复 eslint 的错误
        fix: true
      }
    }
  ]
}
  • 配置 package.json
"eslintConfig": {
  "extends": "airbnb-base",
  "env": {
    "browser": true 
  }
}

js 兼容性处理

  • 下载安装包
    npm install --save-dev babel-loader @babel/core @babel/preset-env @babel/polyfill core-js
  • 修改配置文件
module: {
  rules: [
    {
      test: /\.js$/,
      exclude: /node_modules/,
      loader: 'babel-loader',
      options: {
        // 预设:指示 babel 做怎么样的兼容性处理
        presets: [
          [
            '@babel/preset-env',
            {
              // 按需加载
              useBuiltIns: 'usage',
              // 指定 core-js 版本
              corejs: {
                version: 3
              },
              // 指定兼容性做到哪个版本浏览器
              targets: {
                chrome: '60',
                firefox: '60',
                ie: '9',
                safari: '10',
                edge: '17'
              }
            }
          ]
        ]
      }
    }
  ]
}

js 压缩

  • 修改配置文件
// 生产环境下会自动压缩 js 代码
mode: 'production'

HTML 压缩

  • 修改配置文件
plugins: [
  new HtmlWebpackPlugin({
    template: './src/index.html',
    // 压缩 html 代码
    minify: {
      // 移除空格
      collapseWhitespace: true,
      // 移除注释
      removeComments: true
    }
  })
]

优化配置

标签:npm,webpack4,js,webpack,html,loader,css
From: https://www.cnblogs.com/kieron/p/17435286.html

相关文章

  • chatGTP对webpack4与webpack5的区别的分析
    chatGTP对webpack4与webpack5的区别的分析问1:webpack5与webpack4主要的区别是什么?chatGTP的回答Webpack5与Webpack4的主要区别如下:性能优化:Webpack5在构建速度和性能方面进行了大量的优化,从而可以更快地构建应用程序和库。TreeShaking:Webpack5对TreeShaking进行了改进......
  • webpack4.0核心概念(十一)———— babel
    官⽅⽹站:https://babeljs.io/中⽂⽹站:https://www.babeljs.cn/Babel是JavaScript编译器,能将ES6代码转换成ES5代码,让我们开发过程中放⼼使⽤JS新特性⽽不⽤担⼼兼......
  • webpack4基本使用和url-loader压缩图片
    执行npminit-y,创建package.json文件最基本的配置文件entry:入口文件output:出口,出口里面添地址,和导出的包的名字mode是模式默认production,可以选择为development,也......
  • vue-cli/webpack4.x 打包--chainWebpack
     chainWebpack为一个方法,传入 config进行配置区分生产和开发环境constIS_PROD=['production','stage','preview'].includes(process.env.NODE_ENV)constIS_D......
  • vue-cli/webpack4.x 打包--webpack配置--样式
    css有的时候你想要向webpack的预处理器loader传递选项。可以使用 vue.config.js 中的 css.loaderOptions 选项。比如你可以这样向所有Less样式传入共享的全局......
  • vue-cli/webpack4.x 打包--打包文件输出
    runtimeCompiler ture:runtime-compiler  template开发false:runtime-only     jsx语法开发publicPathvue.config.js中配置打包基路径p......
  • vue-cli/webpack4.x 打包--webpack配置--devServer
    devServer.env.development 配置全局变量#代理配置VUE_APP_BASE_IP='http://192.128.15.157:15530'VUE_APP_BASE_API='/api'vue.config.js 中配置  devS......
  • vue-cli/webpack4.x 打包--兼容IE等低版本浏览器
    依赖版本  "babel-polyfill":"^6.26.0",  "core-js":"3.21.1",  "regenerator-runtime":"0.13.5",main.js引入vue.config.js配置 transpileDe......
  • webpack4.15.1 学习笔记(一) — 基本概念
    入口(entry)出口(output)加载器Loaders插件Plugins模式webpack.config.js配置 终终终终于下定决心,对你下手了,系统的学习一下。webpack是一个应用程序的静态......
  • webpack4.15.1 学习笔记(二) — 配置及开发环境构建
    目录基本安装配置文件管理资源管理输出构建一个开发环境使用sourcemap选择一个开发工具观察模式webpack-dev-serverwebpack-dev-middlewarewebpack......