我正在寻找html < script>
标记内的 type
属性的清晰说明。对于我作为Web开发人员的大多数职业,我的互联网指令是:
< script type ='text / javascript'>
然后将javascript放入其中。< script>
,因为 text / javascript
是默认设置。最长的时间我很天真,只是做了我被告知的事情。现在我正在学习ReactJS,并且有一套新的指令:


 babel
脚本文件顶部< script type =“text / babel”>
我想了解将 type ='text / babel'
添加到 script
标记背后的魔力。我知道javascript是实际在浏览器中运行的唯一语言,因此该额外属性,babel脚本和您在其中编写的代码之间的关系是什么。这个标签是否以某种方式找到了babel脚本并对其做了些什么?这是一个基本的浏览器/ js功能,允许在javascript执行之前预处理脚本标签中的文本吗?我还应该知道什么?
揭秘是这个问题的目标。

答案 0 :(得分:9)
我想了解在脚本标记中添加type ='text / babel'背后的魔力。
没有真正的魔力:您在页面上包含的Babel脚本会查找这些元素并将其转换为ES5,然后让浏览器运行生成的ES5代码。在脚本元素上设置type
会做两件事:
阻止浏览器尝试直接运行它们,
为Babel脚本标识它们。
关于type
上的script
,来自the specification:
type
属性提供脚本的语言或数据格式。如果该属性存在,则其值必须是有效的MIME类型。不得指定charset参数。如果属性不存在,则使用默认值"text/javascript"
。
然后在解释如何处理script
元素时:
如果用户代理不支持此
script
元素的脚本块类型给出的脚本语言,则用户代理必须在此时中止这些步骤。该脚本未执行。
值得在浏览器中调出关于转换的the Babel website says:
在浏览器中进行编译的用例相当有限,因此如果您在生产站点上工作,则应该在服务器端预编译脚本。有关详细信息,请参阅setup build systems。
(他们说“编译”的地方我们大多数人会说“转发”。)
答案 1 :(得分:2)
如果浏览器注册了MIME类型(因为(历史上)可能是VBScript或PerlScript的情况),那么它将由浏览器通过适当的解析器/编译器/解释器/等运行。
否则,它只是DOM中的一个元素,里面有一个文本节点。
其他代码,例如用JavaScript编写,可以找到DOM元素,读取它的内容,然后对其进行操作。这就是巴贝尔所做的。
答案 2 :(得分:2)
不,浏览器对type=text/babel
没有任何作用。主流浏览器仅了解type
属性中支持的MIME类型,并始终默认为ECMAScript(JavaScript)。截至目前,大多数浏览器仍然不完全兼容ES6。
Babel是一个编译器,它将<script type="text/babel">
中包含的任何ES6代码编译成ES5 JavaScript,这是大多数现代浏览器都能理解的版本。当您运行babel代码时,浏览器只会忽略babel脚本。 Babel是查找它的库,将代码转换为ES5并告诉浏览器运行它。