高级前端-Babel

news/2024/7/19 14:58:56 标签: js, javascript, Vue, 高级前端

Babel是什么?是个编译器,把高版本js代码变成低版本js代码

编译过程,把原代码通过词法分析变成一个个token,举例:a+b则拆成了a,+,b三个token

语法分析器把这些token根据对应的语法生成抽象语法🌲

语义分析器根据目标语法生成新的AST

最后生成目标代码,遍历新的AST,生成目标代码

Babel的工作步骤

为什么要用Babel?

js编译器,

  • 作用1: 把高版本js代码编译成js低版本代码
  • 作用2: polyfill,转译新的API,例如Set, Map, promise等
  • 作用3:源码修改

Babel怎么用?

javascript">// babel.config.js

const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV)

const plugins = []
if (IS_PROD) {
  plugins.push('transform-remove-console')
}

module.exports = {
  presets: [
    '@vue/cli-plugin-babel/preset'
  ],
  plugins
}

// presets在plugin之后执行,plugin从前往后执行,presets内的顺序是从后往前

presets:babel的插件集合

preset.env: 根据我们配置的环境,babel自动决定用哪些插件

UseBuiltIns在Vue项目配置中默认使用usage

vue项目的package.json中的

"browserslist": [
    "> 1%",
    "last 2 versions",
    "not ie <= 10"
  ]

这块代码,会被 @babel/preset-env用来决定使用哪些插件,对应上文中的target

 

常见面试题:

1. Babel的原理

2. 实现一个Babel插件


http://www.niftyadmin.cn/n/861113.html

相关文章

高级前端-webpack

什么是webpack&#xff1a;webpack is a module bundler Tapable是webpack的底层依赖 loader让webpack可以处理除了js和json文件以外的别的类型的文件 module.rules.{use: , test: } 目前用的是chainWebpack可以链式调用loader和plugin&#xff0c;并且可以修改对应loader或者插…

高级前端-axios

Axios源码分析 简单源码实现参考&#xff1a;https://jframesea.coding.net/public/interview/Interview/git/files/master/javascript/axios.js 请求API化 1. api不要出现在视图层&#xff0c;不然的话修改起来会很麻烦 2. 建立一个api目录&#xff0c;然后根据业务模块划分ap…

高级前端-页面性能优化

JS和CSS的压缩与混乱 1. 无效字符删除 2. 剔除注释 3. 代码语义缩减和优化 4. 代码优化&#xff08;代码不易看懂&#xff09; 图片相关优化 雪碧图svg > webp > png > jpg图片压缩inline-image浏览器对同一个域名的并发加载数量有限制&#xff0c;所以通常静态资源需…

POST请求数据过大,nginx服务器报500的问题

参考&#xff1a;https://blog.csdn.net/feifeixiang2835/article/details/84964036 把对应nginx里面的client_body_buffer_size值调大即可

vscode + js 跨文件go to definition

You need to create a jsconfig.json file at the root of your project. {"compilerOptions": {"target": "ES6"},"exclude": ["node_modules","**/node_modules/*"] }

axios封装 防止重复请求

// 正在进行中的请求列表 let reqList []/*** 阻止重复请求* param {array} reqList - 请求缓存列表* param {string} url - 当前请求地址* param {function} cancel - 请求中断函数* param {string} errorMessage - 请求中断时需要显示的错误信息*/ const stopRepeatRequest …

axios请求设置responseType为‘blob‘或‘arraybuffer‘下载文件时,正确处理返回值为文件流或json对象的情况

参考&#xff1a;axios请求设置responseType为blob或arraybuffer下载文件时&#xff0c;正确处理返回值为文件流或json对象的情况_努力学习的小绵羊的博客-CSDN博客_axios buffer

仅仅打开了1个页面,为什么有4个进程?

1. 历史浏览器是单进程的&#xff0c;会有很多问题&#xff1a;不稳定、不流畅和不安全&#xff0c;容易造成崩溃 2. 随着时代的发展&#xff0c;浏览器进入多进程时代 目前的多进程架构如下 浏览器进程。主要负责界面显示、用户交互、子进程管理&#xff0c;同时提供存储等功…