_references.js背后的故事html
_references.js是在VS的WEB项目中,提供智能提示的关键技术。jquery
在VS2010发布以后,做者仍是ASP.NET小组成员时,小组想把js编辑器的功能迁移到一个新的“客户端平台小组”。这个小组将要为VS2012建立一个全新的,现代的js编辑器,另外一层目的就是为即将到来的Win8 App提供HTML/JS开发支持。而原来的js编辑器从vs中剥离,但它却在webMatrix中保存下来,包括以后的开发及更新。web
既然要开发新的编辑器,正好是从新设计咱们已经使用过的许多功能的机会。关键之一就是智能提示:缓存
有三个思路来智能提示:app
一、All.js 。项目中全部的js自动加载到智能提示中编辑器
二、Only.js。只有页面中包含的js,才智能提示ide
三、让用户指定要智能提示的js文件。性能
第1种,确定会带来负面影响。未引用的js也提示,那么运行时会报错;会带来性能问题;没法肯定加载的顺序;与此同时,bundling, minification and dynamically loaded JavaScript这几种技术,都让ide无所适从。spa
最终,让用户手动添加引用文件,能消除性能 因素,防止解析html文件中的script标签。设计
总之每种方法都有同意和反对的声音。
显示抑或隐式地引用呢?
既然决定新编辑器要使用第二、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上右键能够方便添加上这个文件。