fkworld / cocos-to-playable-ad

将 cocos creator 构建出来的 web-mobile 项目打包为 playable-ad 项目,即单 html 文件。
MIT License
102 stars 49 forks source link

Uncaught SyntaxError: Unexpected token '<' #1

Closed GDdark closed 4 years ago

GDdark commented 4 years ago

使用了您的工具之后 能生成文件 但是报错了 image 我的Cocos Creator 版本是2.2.2 请问这是版本导致的问题吗

fkworld commented 4 years ago

我在2.2.2中复现了这个问题。 初步定位的bug原因是:在压缩和写入cocos2d-js-min.js这个文件时,将「$&&cc.warn」字符串替换为了「&cc.warn」,导致了html文件格式的异常。 初步检测,与js压缩库uglify无关,与正则替换有关。 异常代码如下:

let base = "<body></body>"
let js = "var $=1;if(true){$&&console.log(1)}"
let result = base.replace(/<\/body>/,`${js}</body>`)
console.log(result)

还在进一步修复中。

fkworld commented 4 years ago

进一步定位此bug:由于replace()方法的第二个参数有一些特殊变量名,其中$&表示「插入匹配的子串」,即第一个参数。 参考文档:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/replace#%E4%BD%BF%E7%94%A8%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%BD%9C%E4%B8%BA%E5%8F%82%E6%95%B0

感谢张春洁同学的提示。

fkworld commented 4 years ago

已修复。 修复方案是:replace方法第二个参数传入一个()=>string函数而不是字符串。

参考提交:https://github.com/fkworld/cocos-to-playable-ad/commit/a823265ef8f74df63878bbb153b92300852d8232