[LayaAir 2.0]正常运行的2.1升级到2.2.0出现循环依赖的错误,这是咋回事丫 ?

尝试迁移了一波 可运行的 2.1的项目 到2.2.0 , 
多了很多 循环依赖的错误 
有没有大佬知道咋解决的? 感谢  !
 
出错了:Circular dependency:...........
 

QQ截图20190730085819.jpg

 
已邀请:

Aar0n

赞同来自:

这个要根据具体情况解决循环依赖

腊笔小新

赞同来自:

循环依赖,是编译时需要处理的事情。
之前的版本1.8,2.0,2.1不是都好好的吗,升级2.2后反而还不行了。
刚好和Laya通过项目建立了深厚的感情。
这一升级此刻,我的心情如图所示~
 

timg.jpg

 

腊笔小新

赞同来自:

退回到2.1版本了。哎,无奈~

康伟

赞同来自:

退回到2.1版本了。哎,无奈+1

177*****182

赞同来自:

只希望官方发布前做个checklist 
用新版ts项目 示例项目都报错
开始编译: Tue Jul 30 2019 16:39:17 GMT+0800 (中国标准时间)
--------------------------------------
[16:39:18] Working directory changed to D:\laya\2.2.0\resources\app
[16:39:18] Using gulpfile D:\Users\Administrator\Personal\myLaya2.2\Client\.laya\compile.js
[16:39:18] Starting 'tsc'...
[16:39:18] Starting 'CopyNoneTSFile'...
[16:39:18] Finished 'CopyNoneTSFile' after 169 ms
error { Error: Command failed: D:\laya\2.2.0\resources\app\node_modules\.bin\tsc.cmd -b "D:\Users\Administrator\Personal\myLaya2.2\Client\src\tsconfig.json" 
at ChildProcess.exithandler (child_process.js:217:12)
at emitTwo (events.js:106:13)
at ChildProcess.emit (events.js:194:7)
at maybeClose (internal/child_process.js:899:16)
at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)
killed: false,
code: 1,
signal: null,
cmd: 'D:\\laya\\2.2.0\\resources\\app\\node_modules\\.bin\\tsc.cmd -b "D:\\Users\\Administrator\\Personal\\myLaya2.2\\Client\\src\\tsconfig.json"' }
stdout src/ui/layaMaxUI.ts(7,19): error TS2304: Cannot find name 'Label'.
src/ui/layaMaxUI.ts(8,18): error TS2304: Cannot find name 'Label'. 
[16:39:28] Finished 'tsc' after 10 s
[16:39:28] Starting 'tsc:compile'...
tsc compile completed!
[16:39:28] Finished 'tsc:compile' after 36 μs
--------------------------------------
编译结束,gulp编译耗时: 11.13s
编译结束,总耗时: 12.893s

荣Ryan

赞同来自:

退回到2.1版本了。哎,无奈+1
 
这次步子迈得有点大,舍弃了browserify改用rollup等等。很多东西兼容不了。
我只升级类库也出现了运行错误。

烟雨离殇

赞同来自:

同问 

177*****182

赞同来自:

咱也不懂 退回到2.1版本了。哎,无奈+1

SF

赞同来自:

咱也不懂 也不敢问。哎,无奈+1

郭兆奎

赞同来自:

大家别急,现在还是beta版,大家反馈的任何问题我们都会尽快修改的。
循环引用的问题其实没大家想象的那么严重,现在问题是我们ide会把循环引用报错,导致不会启动chrome。
实际上你们的项目如果没有修改的话,即使有循环引用,只要原来能运行那么现在应该也能运行。
不过循环引用始终是个问题,很可能产生出错误顺序的代码,这个问题目前任何打包工具都无法解(解决了就与js标准不符合了),只是有的打包工具不报而已。
要去掉项目中的循环引用,只要根据rollup报的循环路径,找到关键的地方打破循环就行,根据我们的转换经验,这个过程并不难。
需要注意的是对于TS来说,A.ts import B.ts 同时 B.ts import A.ts 不一定会构成循环引用,只有他们生成的js也有这种情况才构成循环。
例如 A.ts
import B from 'B'
class A{
   b:B;
}
这种的,在生成js以后由于B只是表示类型,js是不需要的,所以上面的import就没了。 
无法去掉的import主要是类似 new B, extends B, instanceof B, 以及静态成员访问B.stM 这种形式
例如上面的改成
b=new B() 就真的是循环了。
对于真正的循环可以通过引入一个接口对象等方式解决。这个就要看具体项目了。
 
建议大家正视循环引用的问题,真正的去解决它,而不是看运气,运行出错再去改。
ide报错的问题我们下周就会去掉。

此刻该沉默

赞同来自:

楼上解释的太好了,赞。不能运行的问题 下周的版本会修复,循环引用确切的说是某种意义上的风险警告,rollup把这个暴露给大家有益无害

Laya用户

赞同来自:

2.2.0 用旧的(2.1.x)编译脚本(browserify版) 完美解决循环引用问题

腊笔小新

赞同来自:

 用旧的编译脚本(browserify版)
不会提示循环引用, 可以调试. 发布也用旧的脚本 .
 
 const uglify = require(ideModuleDir + "gulp-uglify");
改为
const uglify = require(ideModuleDir + "gulp-uglify-es").default; 
 
 mangle: false  
 这样压缩也不会错了 ,完美.
 

意帅.yisa

赞同来自:

还是退回版本最现实

迷途小羔羊

赞同来自:

搞笑吧,循环引用只在静态变量提出警告才有效,类变量也给提示,那就多余了,而且就算你静态引用不了不提示,运行时js也会报错,无论是A和B哪个出现在前,就会有报错,会js的自然就明白什么错了,用不着提示一大堆,承认一下没做完善很难吗。各位退回2.1也是没用,2.1版本就有bug,是修复了才到2.2的大家去看看历史版本的bug,你们规避不了的

182*****089

赞同来自:

这问题 是无解了吗?一个本不存在依赖问题的项目 移植到最新版直接报出无数个循环依赖,导致项目无法运行。

189*****909

赞同来自:

请问这个循环依赖问题,官方解决了么?我的项目在2.6ide下面也是爆这个警告,但是程序执行正常。

要回复问题请先

商务合作
商务合作