写流星包时可变范围
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
相关文章:
- 部署时使用npm包时发生Meteor错误
- JQuery:单击范围标签时切换日期选择器
- 过滤日期范围 angularjs 时出错
- 谷歌电子表格-删除范围保护时出错
- 尝试在Meteor中添加程序包时出错
- 当浏览器请求部分内容范围请求时,如何检测pdf何时加载到iframe中
- 如何在编辑范围变量时(暂时)避免摘要循环
- 当间隔之间的范围高时,在高图表中显示y轴上的整个值
- Angular:控制器范围内的可重用功能
- Android应用程序在接收intent捆绑包时崩溃
- SVG在嵌入时可访问,但在包含时不可访问
- 'require未定义'在Meteor.js中,当包含NPM包时
- 构建煎茶触摸 2.3 包时出错
- 缩放/动画 jQuery 拖放到可拖放时可拖动
- 将退出过渡添加到基于 D3 圆形包的可重用模块
- 使按钮在 HTML 中填写表单时可单击
- 角度不更新范围更改时的模板
- 当范围在角度可用时,如何在控制器中设置范围属性
- 当使用dburles:Google Maps Meteor包时,我如何添加谷歌地图可视化库
- 写流星包时可变范围