Webpack的基本使用 - babel

Mode配置

Mode配置选项可以告知Webpack使用相应模式的内置优化

默认值是production(什么都不设置的情况下)

可选值有:'none' | 'development' | 'production';

这几个选项有什么区别呢?

认识source-map

我们的代码通常运行在浏览器上时可以打包压缩

真实跑在浏览器上的代码和我们编写的代码有差异

ES6的代码可能被转成ES5

对应的代码行号和列号在经过编译后肯定不一致

代码进行丑化压缩时会将编码名称等修改

使用TypeScript编写的代码最终转成JS

原始源的时候,调试转换后的代码(打包后的代码)是很困难的

因为我们不能保证代码不出错

如何调试转换后不一致的代码呢?

就是用source-map

source-map是从已经转换的代码到原始的源文件

使浏览器可以重构原始源并且在调试器中显示重建的原始源

如何使用source-map

第一步:根据源文件,生成source-map文件,webpack在打包时,可以通过配置生成source-map

javascript 复制代码
const path = require('path');

module.exports = {
    mode:'development',
    entry:'./src/index.js', 
    devtool:'source-map',
    output:{
       path:path.resolve(__dirname,'./build'),
       filename:"bundle.js"
    },
}

第二步:在转换后的代码最后添加一个注释,它指向sourcemap

浏览器会根据我们的注释查找相应的source-map,根据source-map还原代码方便进行调试

在Chrome中可以按照下面的方式打开source-map

最初source-map生成的文件大小是原始文件的十倍,第二版减少了百分之五十,第三版又减少了百分之五十

目前一个133kb的文件,最终的source-map的大小在300kb

目前的source-map长什么样

version:当前使用的版本,也是最新的第三版

sources:从哪些文件转换过来的source-map和打包的代码(最初始的文件)

names:转换前的变量和属性名称

mapping:source-map用来和源文件映射的信息,一串base64 VLQ编码

file:打包后的文件(浏览器加载的文件)

sourceContent:转换前的具体代码信息(和source是对应关系)

sourceRoot:所有的sources相对的根目录

devtool可以设置二十六个值

选择不同的值生成的source-map会略有差异,打包的过程也会有性能的差异,可以根据不同的情况进行选择

为什么需要babel

想要用ES6和TypeScript就得会babel

babel可以作为独立的工具来使用

安装:

bash 复制代码
 npm install @babel/core @babel/cli -D

安装个插件:

bash 复制代码
npm install @babel/plugin-transform-block-scoping -D

使用插件:

bash 复制代码
npx babel ./src --out-dir ./build --plugins=@babel/plugin-transform-block-scoping
javascript 复制代码
//const定义常量(ES6)
const message = 'Hello World';
console.log(message);

const foo = ()=>{
    console.log("foo function exec!");
}
foo();

使用完插件文件就发生了转化:

javascript 复制代码
//const定义常量(ES6)
var message = 'Hello World';
console.log(message);
var foo = () => {
  console.log("foo function exec!");
};
foo();

bebel每使用一种转换都要新安装东西和对应的命令也太麻烦了

所以babel给我们提供了preset预设

bash 复制代码
npm install @babel/preset-env -D

使用预设:

bash 复制代码
npx babel ./src --out-dir ./build --presets=@babel/preset-env

Babel的底层原理

babel可以看成一个编译器,将源代码转换成浏览器可以直接识别的另一段源代码

babel的工作流程也和编译器一样:

解析阶段

转换阶段

生成阶段

相关推荐
wearegogog1235 小时前
基于 MATLAB 的卡尔曼滤波器实现,用于消除噪声并估算信号
前端·算法·matlab
Drawing stars5 小时前
JAVA后端 前端 大模型应用 学习路线
java·前端·学习
品克缤5 小时前
Element UI MessageBox 增加第三个按钮(DOM Hack 方案)
前端·javascript·vue.js
小二·5 小时前
Python Web 开发进阶实战:性能压测与调优 —— Locust + Prometheus + Grafana 构建高并发可观测系统
前端·python·prometheus
小沐°5 小时前
vue-设置不同环境的打包和运行
前端·javascript·vue.js
qq_419854056 小时前
CSS动效
前端·javascript·css
烛阴6 小时前
3D字体TextGeometry
前端·webgl·three.js
桜吹雪6 小时前
markstream-vue实战踩坑笔记
前端
C_心欲无痕6 小时前
nginx - 实现域名跳转的几种方式
运维·前端·nginx
花哥码天下6 小时前
恢复网站console.log的脚本
前端·javascript·vue.js