簡體   English   中英

編寫流星包時的可變范圍

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM