项目实践6:使用html不能直接打开es模块的js文件?

24 阅读1分钟

vite里面,.env.local会及时响应不需要刷新和重启

调用coze的caht时候打开html不行,要启动服务器,因为当时key是用的全局变量存在.env.local里面的,js文件里面使用了import

我想知道为什么我不启动开发服务器而是直接打开html就会有这些问题

GET file:///Users/zpl/code/demo/style.css net::ERR_FILE_NOT_FOUND

index.html:1 Access to script at 'file:///Users/zpl/code/demo/script.js' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: chrome, chrome-extension, chrome-untrusted, data, http, https, isolated-app.

index.html:12 GET file:///Users/zpl/code/demo/script.js net::ERR_FAILED

CORS策略阻止

PlainText
1
Access to script at 'file:///Users/zpl/
code/demo/script.js' from origin 'null' 
has been blocked by CORS policy
  • 原因:当你直接用浏览器打开HTML文件时,使用的是file://协议,浏览器的CORS安全策略会阻止加载ES模块(type="module")
  • 核心问题:现代浏览器不允许从file://协议加载ES模块,只允许从http://或https://协议加载

🛠️ 解决方案

方案1:使用开发服务器(推荐)

完整的现代开发体验,支持热更新、ES模块、现代JavaScript特性

方案2:使用独立HTML文件

将JavaScript代码内联到HTML中,避免ES模块问题

疑问,不使用这个是不是就可以直接用?

是的es模块主要解决的是import的问题,如果js文件里面没有使用到,就可以去掉,然后通过直接打开html来运行

进修es模块: everfind.github.io/posts/2021/…