什么是“;格式寄存器”;JavaScript文件顶部的字符串

What is the "format register" string for at the top of JavaScript files?

本文关键字:顶部 文件 字符串 JavaScript 寄存器 格式 什么      更新时间:2023-09-26

我最近在各种JavaScript文件中看到了顶部的以下字符串:

"format register";

这是干什么用的?

我在angular 2和systemJS库文件中看到了它。

通过添加"格式化寄存器";在所有ts文件的顶部,问题似乎已经解决了,但我认为这只会帮助SystemJS正确理解/加载模块。。

它只是减少了所说的bug。这是它开始的最初对话。但它只是使SystemJS正确加载。事实上,众所周知,SystemJS制作了一个模块,通过添加以下内容:

System.config({
  meta: { main: { format: 'register' } }
});

这里将对此进行更多解释。

使用它的理由。总之,"格式寄存器"用于确保SystemJS正确、有序地加载其模块!希望这能有所帮助!

好问题,我很感兴趣,也不了解自己,所以开始了一个探索。

这似乎是ES5代码支持ES6风格模块的一种方式。

System.register可以被认为是一种新的模块格式,旨在支持ES5中ES6模块的精确语义。这是一种在协作中开发的格式,在Traceur(作为实例化)、Babel和TypeScript(作为系统)中作为模块输出得到支持。该格式支持ES6模块支持的所有动态绑定和循环引用行为。通过这种方式,它充当了进入ES6模块的polyfill路径的安全和全面的目标格式。

https://github.com/ModuleLoader/es6-module-loader/wiki/System.register-Explained

示例用法:

为了添加更多细节,这里是angular 1.x升级说明中的一个示例,它显示了格式化寄存器的操作示例,但它不是在文件顶部的注释,而是在config声明中。

System.config({ packages: { 'base/app/js': { defaultExtension: false, format: 'register', ...

https://angular.io/docs/ts/latest/guide/upgrade.html

使用原因

当未设置模块格式时,将使用基于正则表达式的自动检测。这种模块格式检测从来都不是完全准确的,但很好地满足了大多数用例。

https://github.com/systemjs/systemjs/blob/master/docs/module-formats.md

在文件顶部使用"格式寄存器"是向格式检测提供提示的方法之一。