webpack基础

本文介绍了webpack的核心概念,包括入口、输出、loader和插件。详细讲解了webpack的基本和高级配置,以及性能优化策略,如多进程打包、代码压缩和懒加载。还涉及到Babel的环境搭建和相关配置,并探讨了webpack的面试题,如loader和plugin的区别,以及前端打包和构建的目的。

webpack核心概念

  • 入口(entry): 指示 webpack 应该使用哪个模块
// 可以通过webpack configuration中配置entry属性指定n个不同的入口起点
module.exports = {
   
   
  entry: './path/to/my/entry/file.js',
}
  • 输出(output):告诉 webpack 在哪里输出它所创建的 bundle,以及如何命名这些文件。
// 输出文件的值默认是./dist/main.js,生成文件默认放置在 ./dist 文件夹中
// output属性: path,filename
const path = require('path')
module.exports = {
   
   
  entry: './path/to/my/entry/file.js',
  output: {
   
   
    path: path.resolve(__dirname, 'dist'), // bundle的文件地址
    filename: 'my-first-webpack.bundle.js', // bundle的文件名称
  },
};
  • loader:webpack 只能理解 JavaScript 和 JSON 文件,loader 让 webpack 能够处理其他类型的文件,并将他们转化为模块。
// loader属性: test,use
module.exports = {
   
    
  module: {
   
   
    rules: [
    {
   
    test: /\.txt$/,  // 识别出哪些文件会被转换。
      use: 'raw-loader'  // 定义出在进行转换时,应该使用哪个 loader。
     }],
  }
}
  • 插件(plugin):打包优化,资源管理
// require引用 => 添加到plugins中 => 使用new创建插件实例
 const HtmlWebpackPlugin = require('html-webpack-plugin')
 module.exports = {
   
    
  plugins: [new HtmlWebpackPlugin({
   
    template: './src/index.html' })],
}
  • 模式(mode):development, production 或 none 之中的一个,来设置 mode 参数
module.exports = {
   
   
  mode: 'production',
}
  • 浏览器兼容性(browser compatibility):Webpack 支持所有符合 ES5 标准 的浏览器
  • 环境(environment)

webpack基本配置

  • 拆分配置和merge
  • 启动本地服务
  • 处理es6:使用babel-loder
  • 处理样式: 使用什么loder
  • 处理图片
  • 模块化

webpack高级配置

基本配置只能做demo,不能做线上项目

  • 多入口
  • 抽离css文件
  • 抽离公共代码:第三方模块单独拆分出去,公共引用部分拆分出去
  • 懒加载
  • 处理jsx
  • 处理vue

webpack性能优化

  • 优化产出的代码,产品性能
  • 优化打包构建速度-开发体验和效率

主要有两方面,首先从优化打包构建速度来说,有优化babel-loader,babel编译es6到es5是消耗比较多的,ignorePlugin避免一些东西的插件,noparse不去管哪些,happypack多进程打包工具,parallelUglifyPlugin开启多进程进行一个代码压缩,还有就是自动刷新,热更新(自动刷新的升级版),DllPlugin针对比较大的第三方插件,不必每次都对第三方插件进行打包,事先把第三方库打包好之后,之后打包直接从dll里面引,

优化打包构建速度

  • 优化babel-loader:babel编译es6到es5是消耗比较多的
  • ignorePlugin:避免引用无用模块
  • noparse:避免重复打包
  • happyPack:多进程打包工具
  • parallelUglifyPlugin:开启多进程进行一个代码压缩(多进程压缩js)
  • 自动刷新
  • 热更新:自动刷新的升级版
  • DllPlugin:针对比较大的第三方插件,不必每次都对第三方插件进行打包,事先把第三方库打包好之后,之后打包直接从dll里面引

IgnorePlugin vs noParse

  • IgnorePlugin 直接不引入,代码中没有
  • noParse引入,但不打包

happyPack多进程打包
js是单线程的,node.js本身也是单线程的,webpack也是基于node.js开启的一个工具,也是单线程的

  • js单线程,开启多进程打包
  • 提供构建速度

ParallelUglifyPlugin 多进程压缩 JS

  • webpack 内置Uglify 工具压缩JS
  • JS单线程,开启多进程压缩更快
  • 和happyPack同理

关于开启多进程

  • 项目较大,打包较慢,开启多
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值