The story behind _references.js 简译一下

_references.js背后的故事

_references.js是在VS的WEB项目中,提供智能提示的关键技术。

在VS2010发布之后,作者还是ASP.NET小组成员时,小组想把js编辑器的功能迁移到一个新的“客户端平台小组”。这个小组将要为VS2012创建一个全新的,现代的js编辑器,另一层目的就是为即将到来的Win8 App提供HTML/JS开发支持。而原来的js编辑器从vs中剥离,但它却在webMatrix中保存下来,包括之后的开发及更新。

既然要开发新的编辑器,正好是重新设计我们已经使用过的许多功能的机会。关键之一就是智能提示

有三个思路来智能提示:

1、All.js 。项目中所有的js自动加载到智能提示中

2、Only.js。只有页面中包含的js,才智能提示

3、让用户指定要智能提示的js文件。

第1种,肯定会带来负面影响。未引用的js也提示,那么运行时会报错;会带来性能问题;无法确定加载的顺序;与此同时,bundling, minification and dynamically loaded JavaScript这几种技术,都让ide无所适从。

最终,让用户手动添加引用文件,能消除性能 因素,防止解析html文件中的script标签。

总之每种方法都有赞成和反对的声音。

显示抑或隐式地引用呢?

既然决定新编辑器要使用第2、3两个方法。那么它只要解析页面上的<script>以及加载用户显示声明的三斜杠引用 。/// <reference path="../app/respond.js" />

把js文件从解决方案管理器拖动到页面上时,文档顶部自动插入一个三斜杠的引用。通过这种引用,ide就可能进行智能提示。

_references.js是全局的引用

通过上面显示的引用,用户不得不每个js文件都添加上三斜杠的引用,比如jquery,可能要在所有的文件中引用。这不爽,为了最大化不为降低用户的负担,必须要一个全局的引用缓存。

这于是约定 /scripts/_references.js会自动添加为全局智能提示。

改变引用文件的名称

一些人不喜欢用scripts文件夹,或不喜欢_references的名字。假设一些人要用/js/globals.js这样的名字

vs提供了相应的方法,去选项-》Text Editor->JavaScript->IntelliSense->References中,找到Reference Group中,选择相应的下拉项,会找到引用的文件(我现在安装的vs2015明显没有列出_references.js)

自动实现一切

以上这些功能都随着vs2012发布了,但到了vs2013,我们决定再次改进工作流程。

用户必须手动维护这个引用文件,当用户添加删除或改名后,很容易忘记还要去_references.js更正一下.更好的方法是加载所有的js文件,因为知道这有性能问题以及文件加载顺序的问题,所以必须让用户可以禁止此功能。

连vs都没有提供 默认的项目setting文件,我们不想额外地增加一个setting文件。于是我们引入了一个新的三斜杠的名称

/// <autosync enabled="true" />

同时IDE中,在_references.js文件上右键,会有自动同步和立即更新同步的功能。

自动同步为true时,ide会把你新添加、改名等都同步引用一下,并潜在会有引入顺序问题。

我个人认为不如手动的选择引入文件。

如果项目上没有这个文件,你要安装Web Essentials 2013,然后在/scripts上右键可以方便添加上这个文件。







你可能感兴趣的:(The story behind _references.js 简译一下)