我试图让全局变量在 node.js 中工作,但似乎我并不真正理解这个概念,即使我的理解与文档相匹配。
最小的例子
我使用汇总编译的main.js文件是:
global.a = 1;
require('./core/test.js');
我的core/test.js文件很简单:
console.log(a);
这会导致错误:
未捕获的 ReferenceError: a 未定义
完全编译的输出是:
(function (exports) {
'use strict';
var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
console.log(a);
commonjsGlobal.a = 1;
}((this.LaravelElixirBundle = this.LaravelElixirBundle || {})));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjpudWxsLCJzb3VyY2VzIjpbIkM6L3dhbXAvd3d3L3V1YmMvcmVzb3VyY2VzL2Fzc2V0cy9qcy9jb3JlL3Rlc3QuanMiLCJDOi93YW1wL3d3dy91dWJjL3Jlc291cmNlcy9hc3NldHMvanMvYXBwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnNvbGUubG9nKGEpO1xyXG4iLCJnbG9iYWwuYSA9IDE7XHJcbnJlcXVpcmUoJy4vY29yZS90ZXN0LmpzJyk7XHJcbiJdLCJuYW1lcyI6WyJnbG9iYWwiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUNBZkEsY0FBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7OyJ9
似乎在. a
_ 我不是 100% 确定这在 JS 中是否重要,但它可能会导致错误。 console.log(a);
所以我的问题是:是什么原因造成的,我在这里做错了什么?
可能相关信息:我正在使用 Laravel Elixir 编译所有内容。
注意:请不要发布关于是否在 node.js 或一般情况下使用全局变量的讨论。我知道这通常是个坏主意,但在这种情况下我有充分的理由这样做。
编辑:附加上下文
我真正想做的是让 Zurb Foundation 通过 node.js 与 Laravel Elixir 一起工作。我是foundation-sites
通过 NPM 安装的。foundation-sites
依赖jquery
,它自己拉。但是,Foundation 似乎并没有遵循通常的惯例,即var jquery = require('jquery');
在自己的 js 文件中使用类似的东西。它实际上依赖于jQuery
可用的全局变量。因此,我必须以某种方式确保这一点。
我的实际文件如下所示:
global.jQuery = global.$ = require('jquery');
require('foundation-sites');
因此,如果有任何 Foundation/Laravel 特定的答案,我也会很高兴听到它们。有什么我没有得到的,还是基金会没有以“正确”的方式创建他们的包?