Javascript 从HTML文件中的脚本标记导入js。可能的

Javascript 从HTML文件中的脚本标记导入js。可能的,javascript,html,ecmascript-6,es6-modules,Javascript,Html,Ecmascript 6,Es6 Modules,我想从cms生成的html文件中的脚本标记访问数据。 是否可以在不污染全局命名空间的情况下执行此操作? 我曾尝试使用es6模块,但失败了,我找不到任何关于它的信息 让list=['a','b','c']; 导出默认列表 //test.js 从“./index.html”导入列表 错误: 'net::ERR_中止404' 或: '加载模块脚本失败:服务器使用非JavaScript MIME类型“text/html”进行响应。根据HTML规范,对模块脚本执行严格的MIME类型检查。不,HTML

我想从cms生成的html文件中的脚本标记访问数据。 是否可以在不污染全局命名空间的情况下执行此操作? 我曾尝试使用es6模块,但失败了,我找不到任何关于它的信息


让list=['a','b','c'];
导出默认列表
//test.js
从“./index.html”导入列表
错误: 'net::ERR_中止404' 或:
'加载模块脚本失败:服务器使用非JavaScript MIME类型“text/html”进行响应。根据HTML规范,对模块脚本执行严格的MIME类型检查。

不,HTML规范还没有涵盖这方面的内容(我怀疑永远不会)。(如果是,您仍然需要在第一个脚本标记上使用
type=“module”
)没有模块说明符指定HTML页面中的脚本元素。目前,唯一的模块说明符是JavaScript文件的URL

相反,您可能想要这样的东西:

<script type="module">
import { setList } from "./test.js";
setList(['a', 'b', 'c']);
</script>

从“/test.js”导入{setList};
集合列表(['a','b','c']);
…其中
test.js
导出一个命名的导出,让您告诉它要使用哪个列表

(当然,也可以是默认导出。)

内联
script type=“module”
标记可以
导入
,但尽管它们可以使用
导出
,但由于没有有用的模块说明符,因此无法使用它们创建的导出


这是HTML规范,因为JavaScript规范(详细信息)将模块说明符的形式和语义留给了主机环境。JavaScript规范所说的就是它们是字符串文本

²当然可以,例如使用片段标识符。但是,与HTTP/1.1(尤其是与HTTP/1.0相比)相比,HTTP/2多路复用使得离散资源加载速度如此之快,使得单个资源中包含的所有内容都比几年前显著降低。

您无法从HTML导出JS。但是,您可以使用
标记上的
type=“module”
属性导入它:

<script type="module">
  import list from "./test.js";
  //Use list
</script>

从“/test.js”导入列表;
//使用列表

我也问了自己同样的问题,找到了你的话题。 但后来我想到了一个简单的解决办法

//buffer.js
导出默认let缓冲区={};
//index.html
从“/buffer.js”导入缓冲区;
buffer.helloWorld='helloWorld';
....
从“/buffer.js”导入缓冲区;
log(buffer.helloWorld);

您可以使用
var
声明变量,以便从其他文件访问该变量。