首先,fetch是不支持本地协议的,这我知道。
所以我使用了 script>window.fetch = undefined;</script
script src="./fetch.umd.min.js" charset=“utf-8”></script将原来的fetch替换为普通的请求。
我经过观察发现问题源自于src/import-map.json无法通过file协议加载,仅仅是这一个文件的问题,其它都未受到影响,所以我把这行注释掉了,json里写的什么呢?就是{“imports”:{“cc”:"./…/cocos-js/cc.js"}},那我写到html里不就解决了吗?之后在原位置写了script type=“systemjs-importmap”>{“imports”: {“cc”: “./…/cocos-js/cc.js”}}</script。但是报错
index.js:19 Error: cc, file:///D:/cocos/cocos_work/NewProject_1/build/web-desktop/ (SystemJS https://git.io/JvFET#8)
at system.bundle.js:1:8722
at w.resolve (system.bundle.js:1:8751)
at r.resolve (system.bundle.js:1:11916)
at system.bundle.js:1:3372
不就是cc找不到吗?奇怪,我加进去了呀,那行代码CtrlCCtrlV原格式都没有变过,那是怎么回事?按照原理就是将文件里的唯一那行代码引用进去了,理论cc可以找到。
我于是编写了一个 script type=“module”>import * as cc from ‘cc’;console.log(cc);</script来验证,报的错是相对路径的错,明明是相对路径了,怀疑是后面from ‘cc’;没有相对路径,说明确实没有引用上。
是编码的问题吗?文件才会涉及,行内引用和编码没关系好像。
是构建问题吗?重试了 打包桌面web包,还是这个。
是代码写错了吗?重新打包并阅读了json,写的没问题。
是引用的替换fetch的库有问题冲突了吗?注释了,一样报错,不是这个问题。
是不是我把某些默认选项改了?空包重新打包了,一样问题。
是不是Creator版本问题?3.8.6切到3.8.5了,还是一样。
是不是需要写在head里?不是,一样cc找不到。
是不是wasm之类的构建问题?想的太远了,打住吧,想不出来了。
总言而之:cc找不到
其实打Andorid包也可以,但是开发的时候web包可以快速迭代,节省成本。
百思不得其解,解决了好,没解决就没解决,不着急,不强求。
方法1:NanoHTTPD
方法2:
index.html增加如下代码(加载COCOS的引擎文件之前):function fetchLocal(url) { // 不完善接口,用了物理引擎会出现Error4
return new Promise(function(resolve, reject) {
var xhr = new XMLHttpRequest
xhr.onload = function() {
resolve(new Response(xhr.responseText, {status: 200}))
}
xhr.onerror = function() {
reject(new TypeError(‘Local request failed’))
}
xhr.open(‘GET’, url)
xhr.send(null)
})
}
window.fetch = fetchLocal;
function fetchLocal(url) {
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest
xhr.onload = function () {
resolve(new Response(xhr.response, {
status: 200
}))
}
xhr.onerror = function () {
reject(new TypeError(‘Local request failed’))
}
xhr.open(‘GET’, url)
xhr.responseType = ‘arraybuffer’;
xhr.send(null)
})
};
window.fetch = fetchLocal;
谢谢!不过这一向不稳定,我还是老老实实打原生包吧