当前位置: 首页 > news >正文

vue项目中常见的一些preset及其关系

Babel的作用

Babel主要用途是用来做js代码转换的,将最新的js语法或者api转换成低版本浏览器可兼容执行的代码。

语法兼容是指一些浏览器新特性增加的js写法,例如箭头函数 ()=>{};低版本的浏览器无法识别这些,会导致一些语法解析错误。

api兼容是指随着浏览器版本迭代,新增的一些Api方法,比如Object.assign是ES6的语法,在只支持es5语法的浏览器中,Object对象并没有该方法,会导致调用错误。

preset和polyfill

Babel主要通过**@babel/preset-env和对应的polyfill**来实现API的兼容性。

具体来说,Babel默认只转换新的JavaScript句法(syntax),而不转换新的API。例如,像Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise等全局对象,以及一些定义在全局对象上的方法(比如Object.assign)都不会被Babel直接转码。

为了处理这些新的API,我们可以使用@babel/preset-env。当设置了useBuiltIns选项(不为false)时,@babel/preset-env就会使用polyfill来对API进行处理。而@babel/preset-env主要是依赖core-js来处理API的兼容性,所以需要事先安装core-js。

此外,当配置了useBuiltIns: 'usage’时,Babel会自动将代码里已使用到的且browserslist环境不支持的polyfill导入,而无需在代码中主动import。

另外,babel-polyfill也可以用来为当前环境提供一个垫片,从而实现ES6新API的兼容。但请注意,babel-polyfill已被废弃,推荐使用@babel/preset-env和core-js的组合来替代。

总的来说,Babel通过@babel/preset-env和对应的polyfill(如core-js)来提供API的兼容性。在配置和使用时,需要根据项目的需求和目标浏览器来选择合适的preset和polyfill版本。

preset的Babel配置方式

{presets: ['@vue/cli-plugin-babel/preset']
}

常见预设

1、 @vue/cli-plugin-babel/preset

等价于:@vue/babel-preset-app

2、@vue/babel-preset-app

该预设包含:@babel/preset-env,同时包含以下依赖

{"@babel/core": "^7.11.0","@babel/helper-compilation-targets": "^7.9.6","@babel/helper-module-imports": "^7.8.3","@babel/plugin-proposal-class-properties": "^7.8.3","@babel/plugin-proposal-decorators": "^7.8.3","@babel/plugin-syntax-dynamic-import": "^7.8.3","@babel/plugin-syntax-jsx": "^7.8.3","@babel/plugin-transform-runtime": "^7.11.0","@babel/preset-env": "^7.11.0","@babel/runtime": "^7.11.0","@vue/babel-plugin-jsx": "^1.0.3","@vue/babel-preset-jsx": "^1.2.4","babel-plugin-dynamic-import-node": "^2.3.3","core-js": "^3.6.5","core-js-compat": "^3.6.5","semver": "^6.1.0"}

从中可以看出该预设支持jsx语法。

该预设在不指定option配置的情况下,useBuiltIns默认设置为usage

3、@vue/babel-preset-jsx包含以下依赖项

{"@vue/babel-helper-vue-jsx-merge-props": "^1.2.1","@vue/babel-plugin-transform-vue-jsx": "^1.2.1","@vue/babel-sugar-composition-api-inject-h": "^1.2.1","@vue/babel-sugar-composition-api-render-instance": "^1.2.4","@vue/babel-sugar-functional-vue": "^1.2.2","@vue/babel-sugar-inject-h": "^1.2.2","@vue/babel-sugar-v-model": "^1.2.3","@vue/babel-sugar-v-on": "^1.2.3"}

4、@babel/preset-env

{"@babel/compat-data": "^7.14.0","@babel/helper-compilation-targets": "^7.13.16","@babel/helper-plugin-utils": "^7.13.0","@babel/helper-validator-option": "^7.12.17","@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12","@babel/plugin-proposal-async-generator-functions": "^7.14.2","@babel/plugin-proposal-class-properties": "^7.13.0","@babel/plugin-proposal-class-static-block": "^7.13.11","@babel/plugin-proposal-dynamic-import": "^7.14.2","@babel/plugin-proposal-export-namespace-from": "^7.14.2","@babel/plugin-proposal-json-strings": "^7.14.2","@babel/plugin-proposal-logical-assignment-operators": "^7.14.2","@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.2","@babel/plugin-proposal-numeric-separator": "^7.14.2","@babel/plugin-proposal-object-rest-spread": "^7.14.2","@babel/plugin-proposal-optional-catch-binding": "^7.14.2","@babel/plugin-proposal-optional-chaining": "^7.14.2","@babel/plugin-proposal-private-methods": "^7.13.0","@babel/plugin-proposal-private-property-in-object": "^7.14.0","@babel/plugin-proposal-unicode-property-regex": "^7.12.13","@babel/plugin-syntax-async-generators": "^7.8.4","@babel/plugin-syntax-class-properties": "^7.12.13","@babel/plugin-syntax-class-static-block": "^7.12.13","@babel/plugin-syntax-dynamic-import": "^7.8.3","@babel/plugin-syntax-export-namespace-from": "^7.8.3","@babel/plugin-syntax-json-strings": "^7.8.3","@babel/plugin-syntax-logical-assignment-operators": "^7.10.4","@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3","@babel/plugin-syntax-numeric-separator": "^7.10.4","@babel/plugin-syntax-object-rest-spread": "^7.8.3","@babel/plugin-syntax-optional-catch-binding": "^7.8.3","@babel/plugin-syntax-optional-chaining": "^7.8.3","@babel/plugin-syntax-private-property-in-object": "^7.14.0","@babel/plugin-syntax-top-level-await": "^7.12.13","@babel/plugin-transform-arrow-functions": "^7.13.0","@babel/plugin-transform-async-to-generator": "^7.13.0","@babel/plugin-transform-block-scoped-functions": "^7.12.13","@babel/plugin-transform-block-scoping": "^7.14.2","@babel/plugin-transform-classes": "^7.14.2","@babel/plugin-transform-computed-properties": "^7.13.0","@babel/plugin-transform-destructuring": "^7.13.17","@babel/plugin-transform-dotall-regex": "^7.12.13","@babel/plugin-transform-duplicate-keys": "^7.12.13","@babel/plugin-transform-exponentiation-operator": "^7.12.13","@babel/plugin-transform-for-of": "^7.13.0","@babel/plugin-transform-function-name": "^7.12.13","@babel/plugin-transform-literals": "^7.12.13","@babel/plugin-transform-member-expression-literals": "^7.12.13","@babel/plugin-transform-modules-amd": "^7.14.2","@babel/plugin-transform-modules-commonjs": "^7.14.0","@babel/plugin-transform-modules-systemjs": "^7.13.8","@babel/plugin-transform-modules-umd": "^7.14.0","@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13","@babel/plugin-transform-new-target": "^7.12.13","@babel/plugin-transform-object-super": "^7.12.13","@babel/plugin-transform-parameters": "^7.14.2","@babel/plugin-transform-property-literals": "^7.12.13","@babel/plugin-transform-regenerator": "^7.13.15","@babel/plugin-transform-reserved-words": "^7.12.13","@babel/plugin-transform-shorthand-properties": "^7.12.13","@babel/plugin-transform-spread": "^7.13.0","@babel/plugin-transform-sticky-regex": "^7.12.13","@babel/plugin-transform-template-literals": "^7.13.0","@babel/plugin-transform-typeof-symbol": "^7.12.13","@babel/plugin-transform-unicode-escapes": "^7.12.13","@babel/plugin-transform-unicode-regex": "^7.12.13","@babel/preset-modules": "^0.1.4","@babel/types": "^7.14.2","babel-plugin-polyfill-corejs2": "^0.2.0","babel-plugin-polyfill-corejs3": "^0.2.0","babel-plugin-polyfill-regenerator": "^0.2.0","core-js-compat": "^3.9.0","semver": "^6.3.0","@babel/core": "7.14.2","@babel/core-7.12": "npm:@babel/core@7.12.9","@babel/helper-plugin-test-runner": "7.13.10","@babel/plugin-syntax-dynamic-import": "^7.8.3"}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Spring成神之路】老兄,来一杯Spring AOP源码吗?
  • Java多线程面试题
  • IPython的交互式命令行:交互式命令行界面
  • python 之修改host配置
  • 二十四、常用API之Object
  • 洛杉矶裸机云大宽带服务器的特性和优势
  • 第4章 课程发布:模块需求分析,课程预览(模板引擎 静态页面),课程审核,课程发布(分布式事务,页面静态化:熔断降级),课程搜索(es索引)
  • AR增强现实汽车装配仿真培训系统开发降低投入费用
  • 8. 隔行变色
  • 【思考Spring Security框架的相关问题】
  • 香橙派AIpro做目标检测
  • 【JS|第21期】JavaScript模块化:深入解析三种文件暴露方式
  • buuctf题目讲解-1
  • Docker实战教程(一)
  • 大语言模型里的微调vs RAG vs 模板提示词
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 【刷算法】求1+2+3+...+n
  • C++类中的特殊成员函数
  • HTTP中的ETag在移动客户端的应用
  • Java基本数据类型之Number
  • jdbc就是这么简单
  • JS题目及答案整理
  • Linux Process Manage
  • Solarized Scheme
  • spring + angular 实现导出excel
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 从PHP迁移至Golang - 基础篇
  • 从零开始的无人驾驶 1
  • 后端_ThinkPHP5
  • 基于遗传算法的优化问题求解
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 类orAPI - 收藏集 - 掘金
  • 让你的分享飞起来——极光推出社会化分享组件
  • 如何合理的规划jvm性能调优
  • 终端用户监控:真实用户监控还是模拟监控?
  • C# - 为值类型重定义相等性
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #QT(串口助手-界面)
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (接口自动化)Python3操作MySQL数据库
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)树状数组
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .Net core 6.0 升8.0
  • .NET Core 项目指定SDK版本
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET NPOI导出Excel详解