我想在我所有的Javascript源文件上運行JSHint,但其中一些有一些嵌入式Django模板標記。 JSHint在這個標記上拋出了大量的錯誤。如何在其中使用Django模板標記的文件運行JSHint?
有沒有辦法要麼...
- 告訴JSHint忽略此標記
- 運行Djnago模板與一些虛擬數據解析器產生渲染的js文件的所有排列,然後運行JSHint在那?
我想我可以寫一堆代碼來做#2,但我想知道是否有更簡單的方法。
我想在我所有的Javascript源文件上運行JSHint,但其中一些有一些嵌入式Django模板標記。 JSHint在這個標記上拋出了大量的錯誤。如何在其中使用Django模板標記的文件運行JSHint?
有沒有辦法要麼...
我想我可以寫一堆代碼來做#2,但我想知道是否有更簡單的方法。
根據標記,您可以用JavaScript註釋「隱藏」Django標記。我們這樣做,例如:
// {% if cond %}
someJavaScriptCode();
// {% else %}
somethingElse();
// {% endif %}
// {% include "script.js" %}
的唯一的事情是,你必須與開始的script.js一個空行,否則//
會吃的JavaScript代碼的第一行正當你在那裏。我寫了一個簡單的助手{% includejs %}
自動爲我做。
你也可以使用這個醜陋的解決方案。 jslint認爲「stuff =」是評論的一部分。
var stuff;
/* {{ '*' + '/' }}
stuff = {{ variable_containing_json_object_or_list }};
// */
就個人而言,我路過Django的JavaScript的模板時,通過JSLint的工具,遇到3個問題:
他們可以很容易隱藏在JavaScript註釋,正如安東·科韋爾利弗建議:
// {{ if some_flag }}
console.log("Conditional log");
// {{ endif }}
顯而易見的解決方案是將django標籤用雙引號引起來。然而值得記住的是,生成的代碼可能是無效的,如果變量的內容不正確地轉義:
var javascript_var = "{{ context_var|escapejs }}";
Edwin的伎倆複雜結構工程:
var javascript_var;
/* {{ '*' + '/' }}
javascript_var = {{ context_json_string_var }};
// */
如果您在html模板中包含javascript源模板,您可以在那裏聲明一個「getter」函數並從javascript腳本訪問它:
<script type="text/javascript">function getIt() { return {{ context_var }}; };</script>
<script type="text/javascript">{% include 'script.js' %}</script>
在這種情況下,JavaScript源看起來很接受:
/*global getIt*/
var haveIt = getIt();
我發現,使用--extract標誌往往工作。它也擺脫了你在模板中可能有的任何html代碼。
jshint --extract=always your_template_file.html
居然還有從JSHint隱藏Django的標記規範的方式(或任何其他內容):
/* jshint ignore:start */
javascript_var = {{ context_json_string_var }};
/* jshint ignore:end */
同爲JSLint的是:
/*ignore jslint start*/
javascript_var = {{ context_json_string_var }};
/*ignore jslint end*/
所以,這得到我過去95%的問題,是一個很好的簡單的解決方案,但現在我擔心錯誤或更適當地錯過錯誤,因爲我正在對IF的兩個分支進行測試。你有沒有發現這在實踐中是一個問題? – 2012-03-28 23:05:54
是的,我確實有這個問題。但最終避免了它,因爲我使用Django模板僅用於獲取動態數據的方式重構我們的應用程序。其他一切都是CDN上的原始JavaScript。不確定它是否有幫助,對不起。 : - \ – 2012-03-31 04:21:43
謝謝,這確實有幫助 – 2012-04-02 15:38:45