2013-04-05 32 views
2

Meteor 0.6.0 中引入的文件級JavaScript變量範圍設定打破了用TypeScript(和CoffeeScript以及其他轉譯器)編寫的項目和包。有什麼辦法可以禁用它嗎?有什麼辦法可以禁用var範圍?

例如,這個打字稿代碼:

declare var Meteor: any; 
module Model { 
    export var Players = new Meteor.Collection('players'); 
} 

生成這個JavaScript不再有效,因爲型號不 不再被視爲全球:

var Model; 
(function (Model) { 
    Model.Players = new Meteor.Collection('players'); 
})(Model || (Model = {})); 

預謀this.Model = null;是一個解決方法,但它是多餘的,你將不得不將它應用到Meteor使用的所有代碼中(至少破壞了我的Meteorite軟件包中的一個)。

介紹Meteor特定JavaScript語言語義的原因是什麼?

+0

對流星GitHub的相關討論:全球應用程序變量和「使用嚴格」(https://github.com/meteor/meteor/issues/1380) – 2014-02-19 12:40:05

回答

0

他的方式有點不錯,因爲在所有這些文件共享變量之前有點奇怪。流星將每個JavaScript文件都視爲一個對象。具有較大的項目(> 20個js文件)變得非常困難模塊化應用

我不是太肯定打字稿,但它建議使用@,使一些全球在CoffeeScript中在聲明之前:http://docs.meteor.com/#coffeescript,也許打字稿中有類似的東西嗎? (該@來自CoffeeScript的)

@myFunction = -> 123 
+1

止跌」如果使用JavaScript已久的成語來實現模塊化,則更有意義。例如啓示 模式? 執行特殊的非JavaScript語義會讓 開發人員感到困惑,並打破現有的代碼。對於一個不存在的問題,這是一個不尋常的極端解決方案。如果此功能真的需要 它應該在選擇的基礎上(也許「使用 流星範圍」c.f.「使用嚴格」)。 – 2013-04-05 20:12:59

+0

我也發現這個功能有問題,請參閱這裏的討論:https://groups.google.com/forum/?fromgroups=#!topic/meteor-talk/gYgYhv88nB4,基本上與服務器我很好,因爲它,因爲大多數東西都是這樣(節點/快遞),但客戶端js很多 – Akshat 2013-04-05 20:41:41

相關問題