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

nodejs 012:Babel(巴别塔)语言转换与代码兼容

这里写目录标题

    • 安装 Babel
    • 配置
      • presets配置:常见的 Babel Presets
      • plugins配置:以 plugin-transform-class-properties 的类中属性为例
      • index.jsx

  • Babel 是一个独立的 JavaScript 编译器,主要用于将现代 JavaScript 代码转换为旧版本的 JavaScript,以提高兼容性。

安装 Babel

npm install --save-dev @babel/core @babel/cli @babel/preset-env

配置

  • 然后需要配置 Babel,通过创建一个 .babelrc 文件或在 babel.config.json 中设置Babel 配置。
  • Babel 的配置通常包括 presets 和 plugins。其中 presets 用于指定一组预设的转换规则,plugins则通过自定义的插件形式进行代码兼容转换。
  • babel.config.json 示例:
{"presets": ["@babel/preset-env","@babel/preset-react"],"plugins": ["@babel/plugin-transform-runtime"]
}

presets配置:常见的 Babel Presets

  1. @babel/preset-react
    • 这个 preset 用于转换 React 代码。它包括转换 JSX 语法的插件。
    • 配置示例:
// https://babel.nodejs.cn/docs/babel-preset-react
{"presets": [["@babel/preset-react",{"pragma": "dom", // default pragma is React.createElement (only in classic runtime)"pragmaFrag": "DomFrag", // default is React.Fragment (only in classic runtime)"throwIfNamespace": false, // defaults to true"runtime": "classic" // defaults to classic// "importSource": "custom-jsx-library" // defaults to react (only in automatic runtime)}]]
}
  1. @babel/preset-typescript

    • 这个 preset 用于将 TypeScript 代码转换为 JavaScript 代码,移除 TypeScript 特有的类型信息。
  2. @babel/preset-env

    • 这个 preset 用于将现代 JavaScript 代码转换为兼容的 JavaScript 代码。它根据目标环境(如浏览器或 Node.js 的版本)自动选择需要的插件和 polyfills。
    • 可以通过配置 targets 字段指定要支持的浏览器或环境。例如:
      {"presets": [["@babel/preset-env",{"targets": "> 0.25%, not dead"}]]
      }
      
    • 上面的配置表示目标是市场份额大于 0.25% 的浏览器,并且不是“已死”的浏览器(即不再接收更新的浏览器)。

plugins配置:以 plugin-transform-class-properties 的类中属性为例

  • Babel 是一个 JavaScript 编译器,允许开发者使用最新的 JavaScript 语法和特性,并将代码转译成兼容旧版本浏览器的代码。为了扩展 Babel 的功能,有很多插件可供使用。
  • 命令进行安装(如果没有打包工具帮助自动安装的话):npm install --save-dev @babel/plugin-transform-class-properties
  • .babelrc或(babel.config.json)配置
    "plugins": [["@babel/plugin-transform-class-properties",{ "loose": true }]// 类中属性语言https://babel.nodejs.cn/docs/babel-plugin-transform-class-properties]
  • 比如对以下.html文件的渲染
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div id="root"></div><script src="./js/index.jsx"></script> 
</body>
</html>

index.jsx

import { h, Component, render } from 'preact';class App extends Component { constructor(props) { // constructor(props): 构造函数是类组件的初始化方法super(props);this.state = {// this.state: 定义组件的初始状态。在这里,state 是一个对象,用于存储组件的内部数据。Text: "WORLD",};//  事件处理函数的绑定等代码,函数bind到this对象上// this.onIpcChange = this.onIpcChange.bind(this);}render() { return(<h1>HELLO {this.state.Text}</h1>)}
}render(<App />,document.querySelector('#root'))
  • 简化为
import { h, Component, render } from 'preact';class App extends Component { state = {Text: "WORLD",};render() { return(<h1>HELLO {this.state.Text}</h1>)}
}render(<App />,document.querySelector('#root'))

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • The application may be doing too much work on its main thread.
  • EI-BISYNCH协议,欧陆2000系列设备读取数据
  • 后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0917)
  • Vue|mixin混入
  • 【算法】动态规划—最长回文子序列
  • 排序-----选择排序
  • 开源ERP系统odoo的安装与配置
  • 【Linux】调试和Git及进度条实现
  • MATLAB绘图:5.三维图形
  • DockerLinux安装DockerDocker基础
  • 25届计算机专业毕设选题推荐-基于python的二手电子设备交易平台【源码+文档+讲解】
  • [数据集][目标检测]疟疾恶性疟原虫物种目标检测数据集VOC+YOLO格式948张1类别
  • Linux多块磁盘挂载同一目录
  • AI免费UI页面生成
  • 【LeetCode每日一题】——401.二进制手表
  • 【剑指offer】让抽象问题具体化
  • github指令
  • HTML5新特性总结
  • Intervention/image 图片处理扩展包的安装和使用
  • Java 网络编程(2):UDP 的使用
  • java概述
  • mysql 5.6 原生Online DDL解析
  • MySQL-事务管理(基础)
  • Nacos系列:Nacos的Java SDK使用
  • Otto开发初探——微服务依赖管理新利器
  • Python学习之路16-使用API
  • swift基础之_对象 实例方法 对象方法。
  • vue--为什么data属性必须是一个函数
  • Vue学习第二天
  • 初识 beanstalkd
  • 二维平面内的碰撞检测【一】
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 给第三方使用接口的 URL 签名实现
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 检测对象或数组
  • 力扣(LeetCode)56
  • 马上搞懂 GeoJSON
  • 漂亮刷新控件-iOS
  • 王永庆:技术创新改变教育未来
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 协程
  • 写代码的正确姿势
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 自制字幕遮挡器
  • NLPIR智能语义技术让大数据挖掘更简单
  • raise 与 raise ... from 的区别
  • ​补​充​经​纬​恒​润​一​面​
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (pojstep1.1.2)2654(直叙式模拟)
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (七)glDrawArry绘制
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (四)软件性能测试