了解<script>标记中的“type”属性

时间:2016-05-25 14:49:47

标签: javascript html babeljs react-jsx

我正在寻找html &lt; script&gt; 标记内的 type 属性的清晰说明。对于我作为Web开发人员的大多数职业,我的互联网指令是:

&#xA;&#xA;
    &#xA;
  • 只需编写&lt; script type ='text / javascript'&gt; 然后将javascript放入其中。
  • &#xA;
  • 在html5中,只需编写&lt; script&gt; ,因为 text / javascript 是默认设置。
  • &#xA;
&#xA;&#xA;

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

&#xA;&#xA;
    &#xA;
  • 包括 babel 脚本文件顶部
  • &#xA;
  • 现在写&lt; script type =“text / babel”&gt;
  • &#xA;
  • 瞧!现在你可以在该标签内写一些看起来很像Javascript的内容,但它还有一些很酷的额外功能。
  • &#xA;
&#xA;&#xA;

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

&#xA;&#xA;

揭秘是这个问题的目标。

&#xA;

3 个答案:

答案 0 :(得分:9)

  

我想了解在脚本标记中添加type ='text / babel'背后的魔力。

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

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

  2. 为Babel脚本标识它们。

  3. 关于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并告诉浏览器运行它。