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