首页 > 其他分享 >ast 扣取webpack

ast 扣取webpack

时间:2023-11-03 18:11:20浏览次数:41  
标签:code ast webpack js window let key input 扣取

学了ast 都会自己写扣webpack脚本是吧!!

所以我也写了一份

let fs = require("fs");
let types = require("@babel/types");
let traverse = require("@babel/traverse").default;
let parser = require("@babel/parser");
let generator = require("@babel/generator").default;

let globalobj = {};
let addObj = {};
/** 注入代码
 * 
!function () {
    if (window.flag) {
        console.log("muddle", t);
        if (!e[t]) {
            addObj[t] = globalobj[t];
            eval("e[t] = " + generator(globalobj[t].node.value).code);
        }
    }
}();

 */

//config
require("./env");
require("./input_loader");
window.traverse = traverse;
window.generator = generator;
window.globalobj = globalobj;
window.addObj = addObj;
window.flag = true;

//file
let loaderCode = fs.readFileSync("./input_loader.js", { encoding: "utf-8" });
let muddleCode = fs.readFileSync("./input_muddle.js", { encoding: "utf-8" });

// parserAst
let loaderAST = parser.parse(loaderCode);
let muddleAST = parser.parse(muddleCode);

//遍历所有模块到内存
traverse(muddleAST, {
    ObjectProperty(path) {
        let key = path.node.key;
        if (types.isNumericLiteral(key) || types.isStringLiteral(key)) {
            globalobj[key.value] = path;
        } else if (types.isIdentifier(key)) {
            globalobj[key.name] = path;
        }
    }
});

//导入代码
require("./input_code");

//后面push
traverse(loaderAST, {
    Program(path) {
        let expressSta = path.node.body[0];
        let arg = expressSta.expression.arguments[0];
        for (const key in addObj) {
            arg.properties.push(addObj[key].node);
        }
    }
});

//输出代码
let output = generator(loaderAST).code;
let env = fs.readFileSync("./env.js");
let input_code = fs.readFileSync("./input_code.js");
let code = env + "\n" + output + "\n" + input_code;
fs.writeFileSync('./output.js', code);
View Code

注入代码注入到 

 加载器里面 外面用window._xl 导出加载器;

 加载器放在loader js里面 ,环境代码放到env js里面 要输出的代码放到input_code js里面

webpack 加载器的模块 直接 a={模块}

随便丢到 

导入的模块放到muddle里面  

(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["chunk-vendors"] 这种直接复制进去

标签:code,ast,webpack,js,window,let,key,input,扣取
From: https://www.cnblogs.com/inkser/p/17808142.html

相关文章

  • ElasticSearch【分布式锁】
    一、简介    ES在多线程并发访问修改情况下会用到锁机制。大致分为乐观锁和悲观锁。二、乐观锁    通过_version来记录文档版本。在文档创建时会有一个初始version,默认为1.对文档修改或者删除时,version会递增,也可以指定。只有当版本号大鱼当前版本时,才会修改或者......
  • 1、fastapi--初时
    fastapi是高性能的web框架。他的主要特点是:快速编码减少人为bug直观简易具有交互式文档高性能基于API的开放标准支持python3.6版本。安装pipinstallfastapi安装部署包pipinstalluvicorn开始开发fromfastapiimportFastAPIapp=FastAPI()@app.get("/......
  • 一镜到底 ElasticSearch 数据迁移同步技术
    ##简介[CloudCanal](https://www.clougence.com?kw=51cto_20231103)对于[Elasticsearch](https://www.elastic.co/)的支持经历了很多轮迭代,版本一路从6.x,7.x支持到8.x版本,也适配了其纷繁多样的API。因为Elasticsearch是一个相当流行的、实时的、并且具备一定不可替代能......
  • 一镜到底 ElasticSearch 数据迁移同步技术
    简介CloudCanal对于Elasticsearch的支持经历了很多轮迭代,版本一路从6.x,7.x支持到8.x版本,也适配了其纷繁多样的API。因为Elasticsearch是一个相当流行的、实时的、并且具备一定不可替代能力的搜索引擎,所以很有必要对比下市面上我们能够比较容易获得的、免费的数据迁移......
  • rasterization算法(栅格化)
    光栅化,英文:Rasterization,是指把顶点数据转换为片元的过程。光栅化具有将图转化为一个个栅格组成的图象的作用,特点是每个元素对应帧缓冲区中的一像素。光栅化其实是一种将几何图元变为二维图像的过程。该过程包含了两部分的工作。第一部分工作:决定窗口坐标中的哪些整型栅格区域被......
  • webpack4_CodeSplit——optimization.splitchunks
    目录代码文档树webpack.config.js通过修改entry来达到分割打包文件的目的通过optimization.splitChunks来分离大文件以及重复文件修改entry为单文件,在test.js文件中引入jquery配置optimization.splitchunks多入口情况下的多份大文件重复引入单入口情况下的文件单独打包参考博客代......
  • 相对全的fastio
    structFastIO{ staticconstintS=1048576; charbuf[S],*pL,*pR;intstk[20],Top; #defineClear()(fwrite(buf,1,Top,stdout),Top=0) #definegc()(pL==pR&&(pR=(pL=buf)+fread(buf,1,S,stdin),pL==pR)?EOF:*pL++) #definepc(ch)(((Top==S)&&a......
  • uni.uploadFile和this.$refs.signatureRef.canvasToTempFilePath
    canvasToTempFilePath生成的图片是临时h5路径可用于临时回显,如果图片的路径要上传接口,需要使用uni.uploadFile来将图片上传到服务器//我用uniapp做app签名时写的代码片段,上传完服务器之后的路径就可以传到后端给的接口啦,然后在查询的时候就可以通过订单返回的图片路径进行回显t......
  • elasticSearch 文章
    https://blog.csdn.net/mjl1125/article/details/121782863 https://blog.csdn.net/qq_39397165/article/details/108556817#:~:text=go-elasticSearch%E5%AE%9E%E6%88%98%E7%AF%87%EF%BC%8C%E5%B8%A6%E4%BD%A0%E5%AD%A6%E4%BC%9AelasticSearch%E7%9A%84%E5%A2%9E%E5%88%A0%......
  • HBase启动异常:Master is initializing
    org.apache.hadoop.hbase.PleaseHoldException:Masterisinitializingmaster.hmaster:masterfailedtocompleteinitializationafter900000ms.pleaseconsidersubmittingabugreportincludingathreaddumpofthisprocess.hbase:meta,,1.1588230740state=op......