[英]Variable scope when writing meteor package
當我在流星包中寫一個js文件時,我有以下代碼:
A = 1;
console.log(A);
console.log(window.A);
我想知道為什么第一個console.log打印1但第二個打印未定義。
發生這種情況是因為bundler
器足夠智能地解析您的包源代碼以查找全局變量 。 畢竟,包的(生成的)代碼(即實際加載到瀏覽器的代碼)之前的代碼如下:
/* Package-scope variables */
var A;
這應該解釋一切;)
如果你真的想將你的變量導出到你的包外面,就像@sbking告訴你的那樣,所以在package.js
寫道:
// was Package.on_use in older Meteor versions
Package.onUse(function (api) {
api.export('A');
});
要記住的一件事是,當您在文件開頭放置use strict
語句時,Meteor將不再檢測隱式全局變量,除非它們使用api.export
顯式導出。 因此,當您希望在包代碼中包含私有全局變量時,這只會產生問題。
請注意,當嚴格模式處於活動狀態並且這些變量未放入包“preamble”時,嘗試將值賦值給未定義的變量將導致運行時錯誤,因此這實際上是一個交易破壞者。 在這里查看有關此問題的更多詳細信息。
一個簡單的解決方法是將所有私有全局變量放在一個文件中,開頭沒有use strict
語句:
// globals.js
// no "use strict" statement here ...
MyPrivateVariable1 = null;
MyPrivateVariable2 = null;
Meteor命名空間包變量。 要導出包變量,您需要在package.js
文件中使用api.export
。 在這里查看示例:
https://github.com/meteor/meteor/blob/devel/packages/email/package.js
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.