我得到了这个错误,而试图启动一个html页面使用的javascript文件导入一个函数从另一个文件:
Access to script at 'file:///C:/Users/bla/Desktop/stuff/practice/jsPractice/funcexecute.js'
from origin 'null' has been blocked by CORS policy:
Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.
Failed to load resource: net::ERR_FAILED
下面是html代码:
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
<title>Page Title</title>
<meta name='viewport' content='width=device-width, initial-scale=1'>
</head>
<body>
<script type = 'module' src='funcexecute.js'></script>
</body>
</html>
js文件,该文件是从html:(执行函数. js)
import sumup from '/funcfile.js';
console.log(sumup(1,2));
导入模块:(函数文件. js)
function sumup(num1, num2){
return num1+num2;
}
export default sumup;
我该如何解决这个问题?(即时通讯使用vscode)
5条答案
按热度按时间dauxcl2d1#
如果不使用服务器,则不能将脚本文件用作模块。Take a look here
以下是一些选项
http-server .
)简而言之,不能将
type="module"
与 file 协议一起使用v1l68za42#
右键单击Visual Studio代码中的 index.html 文件,选择使用Live Server打开。
这将解决您的问题。
JS中的导出/导入只能在服务器上工作,它们不能在本地机器上工作(有不同的代码)。
我已经在我的YouTube频道上创建了一个循序渐进的video。
j2cgzkjk3#
type = "module"
通常与webpack一起使用。1.如果不使用Webpack,则需要启动静态服务
http-server -p 8003
启动服务6psbrbz94#
导致此问题的原因是正在直接打开该文件;所以似乎有几种方法可以解决这个问题。一个是禁用Chrome的安全性,尽管我尝试了很多次,但我还是无法让它放弃这个幽灵:我围绕Chrome的-disable-web-security标记尝试了各种组合。
第二种选择是在本地托管站点,有那么一小会儿我考虑过使用IISExpress;但幸运的是,我偶然发现了这个工具,它为您在本地托管了一个站点。
它可以作为npm包安装:npm install--global http-server安装后,只需导航到相关目录,然后键入http-server:
然后,您可以导航到特定页面;例如:
而且没有更多的CORS错误(还不太起作用,但这是一个完全不同的故事)。
cvxl0en25#
将脚本链接中的
type="module"
替换为type="JavaScript"
。