我有一个非常大的编译文件(未丑化),其中包含近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);
}
})