标签:
_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" />
The story behind _references.js 简译一下
标签:
原文地址:http://my.oschina.net/u/1540190/blog/487565