_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上右鍵能夠方便添加上這個文件。