如何减少jscodeshift解析时间

时间:2018-09-03 16:32:15

标签: facebook jscodeshift codemod

我有一个非常大的编译文件(未丑化),其中包含近4,20,000行代码。 该文件包含我项目的所有js代码,因为它带有一些额外的参数。现在,一旦源文件更改,我想更新编译的文件。

我的源文件名 sourceFile.js 看起来像这样:

define(['abc'],function(abc){
   //doSomething here
});

我的编译文件如下所示: compiledJS.js

define('sourceFile',['abc'],function(abc){
         //doSomething here
});
define('sourceFile2',['abc'],function(abc){
             //doSomething here
});
define('sourceFile3',['abc'],function(abc){
             //doSomething here
});

我找到了更新已编译文件的方法,但是它的运行速度非常慢,即更改需要3分钟以上的时间。我的代码是这样的:

var j = require("jscodeshift");
var fs= require('fs');

var appRoorDir = "D:\\codemod\\";
const compiledFile=appRoorDir+'compiledJS.js';
const sourceFile=appRoorDir+'sourceFile.js';

function readFiles(path) {
    let content;
    content = fs.readFileSync(path)
    fs.close(0)
    return content;
}

var compiledFileContent = readFiles(compiledFile).toString();

//getting content of source file
var itemToPaste = compiledFileContent.find(j.CallExpression).forEach(path=>{
        if(path.value.callee.name==="define"){
          return j(path.value.arguments[1]).find(j.FunctionExpression).toSource()
        }
  })

var sourceFile = readFiles(compiledFile).toString()

var astSourceFile = j(sourceFile);

//setting content of source file to compiled file
var astCompiledFile=j(compiledFileContent)
astCompiledFile.find(j.CallExpression).forEach(path=>{
    if(path.value.callee.name==="define" && j(path.value.arguments[0]).toSource()==='sourceFile'){
        j(path.value.arguments[1]).replaceWith(itemToPaste);
    }
  })

0 个答案:

没有答案