Как сократить время разбора jscodeshift - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть очень большой скомпилированный файл (без uglified), который содержит почти 4 200 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);
    }
  })
...