Open wanghuatao opened 1 year ago
生效的(Node运行时),看Demo项目,修改注释中的部分。
我的环境 win10,node 16.15.0,PuerTS_Nodejs_1.4.1 修改update方法内容还是不生效,只能实时编译
看一下你的启动逻辑,有加载 developerTools
吗?
https://github.com/sbfkcel/puerts_cli/blob/main/Commands/init/Unity/Assets/CS/App.cs#L39 在这上一行打一条日志
if(developerTools != string.Empty){
Debug.Log("ExecuteModule developerTools "); // 启用 SourceMap 映射
vm.ExecuteModule(developerTools);
};
log有正常打印
# 使用where找到你的puer安装目录
where puer
# 在输出的目录下找下 `lib/createDebugers.js` 69 行 开始的方法中添加日志,修改为下面的参考片段。看进行到哪里了(https://github.com/sbfkcel/puerts_cli/blob/main/lib/createDebugers.js#L69)
async update(filePath){
console.log("1 进到更新方法中来了",filePath);
if(!this.debuger){return;}
const scriptSource = fs.readFileSync(filePath,'utf-8');
console.log("2 读取到了文件",scriptSource);
const scriptId = this.pathMap.get(createHash(filePath));
console.log("3 拿到模块ID",scriptId);
if(scriptId === undefined){return;};
const isExist = await this.debuger.getScriptSource({scriptId});
console.log("4 模块存在",isExist);
if(!isExist || isExist.scriptSource === scriptSource){return;}; // 代码一样则不需要处理
const res = await this.debuger.setScriptSource({scriptId,scriptSource}); // 重载
console.log("5 代码与之前不一样,执行完重载");
console.log(`${lang('overload')}${filePath}`);
}
3 拿到模块ID undefined
走到这里
在下面一行把 createHash(filePath)、filePath 都打印一下呢?
在init方法里面 console.log('写入文件信息',scriptId,filePath,params.url);打印信息如下: 写入文件信息 155 27b704a87689e8f5acbc06f514deb89d G:/svn/TestPuerTs/Assets/Resources/JS/App.js 但是在update方法里面: console.log("3 拿到模块ID",scriptId,createHash(filePath),filePath);打印信息如下: 3 拿到模块ID undefined 1d88aed68f03ecda690fe152a5492f93 G:\svn\TestPuerTs\Assets\Resources\JS\App.js.
两个地方产生的hash不一样,应该是 分隔符 / \ 造成的
在update方法第一行加上 filePath = filePath.replace(/\/g,'/'); 现在可以hotreload了
应该是windows路径造成的。晚点儿我修复一下
puer dev --reload true 命令执行后,通过在 App.ts 的constructor里添加如下函数,并修改log,发现 editor没有输出新log setInterval(function () { console.log(
FPS3:${Time.frameCount}
); }, 1000);