问题 了解标记中的“type”属性


我正在寻求一个明确的解释 type html中的属性 <script> 标签。对于我作为网络开发人员的大部分职业生涯,我在互联网上的指示是:

  • 写吧 <script type='text/javascript'> 然后把javascript放在里面。
  • 在html5中,只需写 <script> 因为 text/javascript 是默认值。

而且最长的时间我很天真,只是做了我被告知的事情。现在我正在学习ReactJS,并且有一套新的指令:

  • 包括 babel 脚本位于文件顶部
  • 现在写 <script type="text/babel">
  • 瞧!现在你可以在该标签内写一些看起来很像Javascript的东西,但它还有一堆很酷的附加功能。

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

神秘化是这个问题的目标。


4977
2018-05-25 14:49


起源



答案:


我想了解将script ='text / babel'添加到脚本标记背后的魔力。

没有真正的魔力:您在页面上包含的Babel脚本会查找这些元素并将其转换为ES5,然后让浏览器运行生成的ES5代码。设置 type 在脚本元素上做两件事:

  1. 阻止浏览器尝试直接运行它们,并且

  2. 为Babel脚本标识它们。

关于 type 上 script  一般来说来自 规范

type attribute给出脚本的语言或数据的格式。如果该属性存在,则其值必须是有效的MIME类型。不得指定charset参数。如果属性不存在,则使用默认值 "text/javascript"

然后在解释如何处理时 script 内容:

如果用户代理不支持脚本块的类型给出的脚本语言 script 如果元素,那么用户代理必须在此时中止这些步骤。该脚本未执行。


值得一提的是什么 巴别塔网站说 关于浏览器中的转换:

在浏览器中进行编译具有相当有限的用例,因此如果您在生产站点上工作,则应该在服务器端预编译脚本。看到 设置构建系统 了解更多信息。

(他们说“编译”的地方我们大多数人会说“转型”。)


8
2018-05-25 14:57





如果浏览器具有已注册的MIME类型(如(历史上)可能是VBScript或PerlScript的情况),那么它将由浏览器通过适当的解析器/编译器/解释器/等运行。

否则,它只是DOM中的一个元素,其中包含一个文本节点。

其他代码,例如用JavaScript编写,可以找到DOM元素,读取它的内容,然后对其进行操作。这就是巴贝尔所做的。


2
2018-05-25 14:55





不,浏览器没有做任何事情 type=text/babel。主流浏览器只能理解支持的MIME类型 type 属性,并始终默认为ECMAScript(JavaScript)。截至目前,大多数浏览器仍然不完全兼容ES6。

Babel是一个编译器,可以编译包含在其中的任何ES6代码 <script type="text/babel"> 进入ES5 JavaScript,这是大多数现代浏览器都能理解的版本。运行babel代码时,浏览器只会忽略babel脚本。 Babel是查找它的库,将代码转换为ES5并告诉浏览器运行它。


2
2018-05-25 14:59