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

做存储各种环境信息的网站建设手机版网站需要主机多少空间

做存储各种环境信息的网站,建设手机版网站需要主机多少空间,电子商务网站建设期末试题及答案,ping wordpressBabel 是一个非常流行的 JavaScript 编译器,下面我们将从零到一编写一个 babel 箭头函数语法转换插件,掌握 babel 插件设计思路与编写规范,需求很简单就是将箭头函数转换为普通函数。 const test ()>{console.log("Hello World!&qu…

Babel 是一个非常流行的 JavaScript 编译器,下面我们将从零到一编写一个 babel 箭头函数语法转换插件,掌握 babel 插件设计思路与编写规范,需求很简单就是将箭头函数转换为普通函数。

const test = ()=>{console.log("Hello World!") 
}

如上所示,通过 babel 编译后,生成如下代码:

const test = function(){console.log("Hello World!") 
}

1. 自定义插件

1.1. 使用types辅助修改

首先定义箭头函数插件:plugin-arrow-functions.js

const { types: t } = require("@babel/core");module.exports = function () {return {visitor: {ArrowFunctionExpression(path) {// 我当前访问到的箭头函数节点const { node } = path;const body = t.isBlockStatement(node.body)? node.body: t.blockStatement([t.returnStatement(node.body)]);const functionExpression = t.functionExpression(null,node.params,body,node.async);console.log("🚀 ~ ArrowFunctionExpression ~ functionExpression:",functionExpression);// // 假设箭头函数表达式直接返回值,需要特殊处理// if (!t.isBlockStatement(node.body)) {//     functionExpression.body = t.blockStatement([//       t.returnStatement(node.body),//     ]);// }path.replaceWith(functionExpression);}}}
}

通过 types 辅助对象,可以判断当前访问 ast 节点的类型以及对其类型进行加工。

然后在 babel.config.js中定义该插件。

module.exports = {plugins: ["./plugins/arrow-function.js"],
};

最后修改 package.json,添加构建脚本命令。

"scripts": {"build": "babel src -d dist"
}

最后执行pnpm build 执行 babel 编译,在 dist 中输出目标资源,经验证符合要求。

1.2. 使用@babel/helper-plugin-utils

这个方案只是在 visitor 时有所差异,我们可以这样处理:

const { declare } = require("@babel/helper-plugin-utils");
module.exports = declare((api, options) => {const noNewArrows = api.assumption("noNewArrows") ?? options.spec;return {name: "transform-arrow-functions",visitor: {ArrowFunctionExpression(path) {if (!path.isArrowFunctionExpression()) return;path.arrowFunctionToExpression({allowInsertArrow: false,noNewArrows,specCompliant: !noNewArrows,})}}}
})

2. Babel编译过程

Babel 最核心的流程我们可以概括为上图所示,parser => traverse => generator

我们以一个问题来切入:

const a = 1;
let b = 2;
var c = "aiguangyuan";

请将以上代码,转为如下所示 ES5 代码:

var a = 1;
var b = 2;
var c = "aiguangyuan";

2.1. parser

借助@babel/parser将源代码转为 ast 结构,即:

const parser = require('@babel/parser');
const ast = parser.parse(code);

2.2. traverse

借助 @babel/traverse将 ast 进行处理生成新 ast,即:

const traverse = require('@babel/traverse');// 访问者对象
const visitor = {// 遍历声明表达式// 可以直接通过节点的类型操作AST节点。VariableDeclaration(path) {// 替换if (path.node.kind === 'var') {path.node.kind = 'let';}},
};
traverse.default(ast, visitor);

或者:

const traverse = require('@babel/traverse');traverse.default(ast, {enter(path) {if (path.isVariableDeclaration({ kind: 'var' })) {path.node.kind = 'let';}},
});

2.3. generator

借助@babel/generator根据目标 ast 生成目标代码,示例:

const generator = require('@babel/generator');generator.default(ast, {}, code).code;

2.4. 完整过程

const parser = require('@babel/parser');
const traverse = require('@babel/traverse');
const generator = require('@babel/generator');const trans = (code) => {const ast = parser.parse(code);// 访问者对象const visitor = {// 遍历声明表达式// 可以直接通过节点的类型操作AST节点。VariableDeclaration(path) {// 替换if (path.node.kind == 'var') {path.node.kind = 'let';}},};traverse.default(ast, visitor);// 生成代码const newCode = generator.default(ast, {}, code).code;return newCode;
};const code = `const a = 1
let b = 2
var c = 3`;
console.log(trans(code));

文章转载自:

http://XkZ7PAB8.jgLqn.cn
http://UuN0435U.jgLqn.cn
http://0IEG2zr1.jgLqn.cn
http://Cs0zsq8e.jgLqn.cn
http://R7oX9BPe.jgLqn.cn
http://CBmxMb4K.jgLqn.cn
http://V2HwLqiA.jgLqn.cn
http://fGGZtpW0.jgLqn.cn
http://6euiYxyW.jgLqn.cn
http://hSRmbAuq.jgLqn.cn
http://jRZMHdus.jgLqn.cn
http://B61SKJC6.jgLqn.cn
http://KTQYIQJD.jgLqn.cn
http://GOpfRI0a.jgLqn.cn
http://zn7AOwWv.jgLqn.cn
http://sCAycYCC.jgLqn.cn
http://4M2ZpVvU.jgLqn.cn
http://kVVZn0rb.jgLqn.cn
http://M1plcebX.jgLqn.cn
http://NRDbuNPE.jgLqn.cn
http://5AQgkBaG.jgLqn.cn
http://PULUpg78.jgLqn.cn
http://6xmpSImM.jgLqn.cn
http://qvfcLYdZ.jgLqn.cn
http://YOBFgEtH.jgLqn.cn
http://auV5LGsi.jgLqn.cn
http://gSWzQE0l.jgLqn.cn
http://XliKDeDS.jgLqn.cn
http://sCLqyEDV.jgLqn.cn
http://yvnlFGYC.jgLqn.cn
http://www.dtcms.com/wzjs/746503.html

相关文章:

  • WordPress程序漏洞seo课程培训班费用
  • 成都市双流区建设局官方网站广州洲聚网站开发
  • 网站开发需要几个专业网站结构优化包括什么
  • 做外贸的人常用的网站开发工具都有什么
  • 环保企业网站建设现状百度关键词排名突然没了
  • 网站服务器放置地怎么填自己设计装修的app
  • 网站维护属于什么专业怎么弄一个公司网站
  • 网站建设宣传的目的阳江网胜
  • 做网站运营工作有前景吗建设网站公司 昆山
  • 网页设计与网站建设设计报告网站建设入门书
  • 更新网站 seo高端建站
  • 湖州网站设计公司的别名是宁波公司网站制作
  • 怎么做购物网站的分类目录建设银行官网首页网站招聘
  • 我想做个网站电子商务网站建设的知识点
  • 网站建设综合实训总结与体会友情链接检索数据分析
  • 农业信息网站建设在线设计logo图片
  • wordpress页脚代码一键优化表格
  • ai工具推荐哈尔滨网站优化
  • 网站修改需要什么常设中国建设工程法律网站
  • 网站建设无广告wordpress更新需要连接ftp
  • 商城网站都有什么功能专科医院网站建设
  • 凡科做网站类型应该做哪个iis7.5 查看网站流量
  • 赣州建站服务如何做公司网站网页
  • 成都网站建设市场备案用的网站建设方案书
  • 株洲建设企业网站摄影建设网站
  • 常德企业网站建设网页制作教程软件
  • 在哪里查网站是什么时候建站jsp网站建设模板
  • 什么网站可以做调察问卷seo排名赚下载
  • 北京高端网站建设宣传网站运营建设
  • 网站开发的思维导图wordpress 忘记管理员