我正在尝试在node.js中使用全局变量,但似乎我并不真正理解这个概念,即使我的理解与文档相符。
最小示例
我的main.js文件,使用rollup编译:
global.a = 1;
require('./core/test.js');
我 core/test.js 文件只是这样的:
console.log(a);
这导致了错误:
完全编译输出为:未捕获的引用错误: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
在console.log(a);
之后才被定义。我不确定这在JS中是否重要,但可能会导致错误。我的问题是:是什么导致了这个问题,我在这里做错了什么?
可能相关的信息:我正在使用Laravel Elixir编译所有内容。
注:请不要讨论是否在node.js或通常情况下使用全局变量。我知道这通常是一个坏主意,但在这种情况下我有一个非常好的理由这样做。
编辑:额外的上下文
我真正想做的是通过node.js使Zurb Foundation与Laravel Elixir配合使用。我通过NPM安装了
foundation-sites
。foundation-sites
依赖于jquery
,它自己拉取。然而,Foundation似乎没有遵循像在自己的js文件中只使用var jquery = require('jquery');
这样的惯例。它实际上依赖于全局jQuery
变量可用。因此,我必须确保某种方式。我的实际文件看起来像这样:
global.jQuery = global.$ = require('jquery');
require('foundation-sites');
所以如果有任何与Foundation/Laravel相关的答案,我会非常乐意听取。是我没有理解到位,还是Foundation只是没有以“正确”的方式创建他们的包?
global
。 - T.J. Crowder