关于javascript:node.js全局变量?

node.js global variables?

我在这里问:node.js需要继承吗?

有人告诉我,我可以通过省略var来设置全局范围的变量。

这对我不起作用。

IE:

1
_ = require('underscore');

不能在所需文件上使用。我可以用Express的app.set进行设置,但可以在其他地方购买。

有人能证实这是可行的吗?谢谢。


global._ = require('underscore')


在全局变量节点集,你可以通过"全球"或"全球"对象:

1
GLOBAL._ = require('underscore'); // but you"shouldn't" do this! (see note below)

或更多的usefully…

1
GLOBAL.window = GLOBAL;  // like in the browser

从节点的源代码,你可以看到,这是一个aliased对方:

1
2
3
node-v0.6.6/src/node.js:
28:     global = this;
128:    global.GLOBAL = global;

在上面的代码,"本"是环球的上下文。(这commonjs模块与系统节点使用"本"),一个对象在A模块(IE,"代码")是一个全球的上下文。本研究证明,下面,我spew湖"的对象,然后在"巨人"全球"的对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
console.log("
THIS:"
);
console.log(this);
console.log("
GLOBAL:"
);
console.log(global);

/* outputs ...

THIS:
{}

GLOBAL:
{ ArrayBuffer: [Function: ArrayBuffer],
  Int8Array: { [Function] BYTES_PER_ELEMENT: 1 },
  Uint8Array: { [Function] BYTES_PER_ELEMENT: 1 },
  Int16Array: { [Function] BYTES_PER_ELEMENT: 2 },
  Uint16Array: { [Function] BYTES_PER_ELEMENT: 2 },
  Int32Array: { [Function] BYTES_PER_ELEMENT: 4 },
  Uint32Array: { [Function] BYTES_PER_ELEMENT: 4 },
  Float32Array: { [Function] BYTES_PER_ELEMENT: 4 },
  Float64Array: { [Function] BYTES_PER_ELEMENT: 8 },
  DataView: [Function: DataView],
  global: [Circular],
  process:
   { EventEmitter: [Function: EventEmitter],
     title: 'node',
     assert: [Function],
     version: 'v0.6.5',
     _tickCallback: [Function],
     moduleLoadList:
      [ 'Binding evals',
        'Binding natives',
        'NativeModule events',
        'NativeModule buffer',
        'Binding buffer',
        'NativeModule assert',
        'NativeModule util',
        'NativeModule path',
        'NativeModule module',
        'NativeModule fs',
        'Binding fs',
        'Binding constants',
        'NativeModule stream',
        'NativeModule console',
        'Binding tty_wrap',
        'NativeModule tty',
        'NativeModule net',
        'NativeModule timers',
        'Binding timer_wrap',
        'NativeModule _linklist' ],
     versions:
      { node: '0.6.5',
        v8: '3.6.6.11',
        ares: '1.7.5-DEV',
        uv: '0.6',
        openssl: '0.9.8n' },
     nextTick: [Function],
     stdout: [Getter],
     arch: 'x64',
     stderr: [Getter],
     platform: 'darwin',
     argv: [ 'node', '/workspace/zd/zgap/darwin-js/index.js' ],
     stdin: [Getter],
     env:
      { TERM_PROGRAM: 'iTerm.app',
        'COM_GOOGLE_CHROME_FRAMEWORK_SERVICE_PROCESS/USERS/DDOPSON/LIBRARY/APPLICATION_SUPPORT/GOOGLE/CHROME_SOCKET': '/tmp/launch-nNl1vo/ServiceProcessSocket',
        TERM: 'xterm',
        SHELL: '/bin/bash',
        TMPDIR: '/var/folders/2h/2hQmtmXlFT4yVGtr5DBpdl9LAiQ/-Tmp-/',
        Apple_PubSub_Socket_Render: '/tmp/launch-9Ga0PT/Render',
        USER: 'ddopson',
        COMMAND_MODE: 'unix2003',
        SSH_AUTH_SOCK: '/tmp/launch-sD905b/Listeners',
        __CF_USER_TEXT_ENCODING: '0x12D732E7:0:0',
        PATH: '/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:~/bin:/usr/X11/bin',
        PWD: '/workspace/zd/zgap/darwin-js',
        LANG: 'en_US.UTF-8',
        ITERM_PROFILE: 'Default',
        SHLVL: '1',
        COLORFGBG: '7;0',
        HOME: '/Users/ddopson',
        ITERM_SESSION_ID: 'w0t0p0',
        LOGNAME: 'ddopson',
        DISPLAY: '/tmp/launch-l9RQXI/org.x:0',
        OLDPWD: '/workspace/zd/zgap/darwin-js/external',
        _: './index.js' },
     openStdin: [Function],
     exit: [Function],
     pid: 10321,
     features:
      { debug: false,
        uv: true,
        ipv6: true,
        tls_npn: false,
        tls_sni: true,
        tls: true },
     kill: [Function],
     execPath: '/usr/local/bin/node',
     addListener: [Function],
     _needTickCallback: [Function],
     on: [Function],
     removeListener: [Function],
     reallyExit: [Function],
     chdir: [Function],
     debug: [Function],
     error: [Function],
     cwd: [Function],
     watchFile: [Function],
     umask: [Function],
     getuid: [Function],
     unwatchFile: [Function],
     mixin: [Function],
     setuid: [Function],
     setgid: [Function],
     createChildProcess: [Function],
     getgid: [Function],
     inherits: [Function],
     _kill: [Function],
     _byteLength: [Function],
     mainModule:
      { id: '.',
        exports: {},
        parent: null,
        filename: '/workspace/zd/zgap/darwin-js/index.js',
        loaded: false,
        exited: false,
        children: [],
        paths: [Object] },
     _debugProcess: [Function],
     dlopen: [Function],
     uptime: [Function],
     memoryUsage: [Function],
     uvCounters: [Function],
     binding: [Function] },
  GLOBAL: [Circular],
  root: [Circular],
  Buffer:
   { [Function: Buffer]
     poolSize: 8192,
     isBuffer: [Function: isBuffer],
     byteLength: [Function],
     _charsWritten: 8 },
  setTimeout: [Function],
  setInterval: [Function],
  clearTimeout: [Function],
  clearInterval: [Function],
  console: [Getter],
  window: [Circular],
  navigator: {} }
*/

*注:"全球的安全设置。_",你应该只是做var _ = require('underscore');将军。是的,你做的是一个单一的文件中使用下划线的,就像你做的import com.foo.bar;java知识。这使得它更容易找到你的代码文件之间的联系是因为做的是"显"。mildly恼人,但一件好事。…………………这是来。

在每一个有规则的例外。我是一个非常精确的时间,我需要设置"全球。_"。我是创建一个定义文件系统的"配置",这是基本的JSON的,但是"写在JS"让一位更多的灵活性。搜索配置文件没有要求陈述,但我想他们有下划线的访问(在整个系统predicated和下划线下划线什么模板),所以在评价"config",一个"全球_集。"。所以是的,为每一个规则的例外,它在的地方。但你有更好的有一个该死的好理由不仅"I get打字累了,因此我想要求一个打破会议"。


其他的解决方案,使用的关键字是一个噩梦的全球功能(+ / readability命名空间污染和错误)当项目变得更大。我见过这个错误多次在纽约大学和有固定它。

使用JS文件,然后使用模块出口。

例子:

globals.js

1
2
3
4
5
var Globals = {
    'domain':'www.MrGlobal.com';
}

module.exports = Globals;

如果你想使用要求进行使用。

1
2
var globals = require('globals'); //<< globals.js path
globals.domain //<< Domain.


什么样global.MYAPI = {}全球命名空间A

1
global.MYAPI._ = require('underscore')

编辑后的卡米洛-马丁评论:所有其他参与谈海报浴模式。因此,除了进行讨论,一个最好的方式定义的全局变量(OP是通过命名空间的问题)。

"提示:http:////thanpol.as JavaScript开发使用命名空间


你可以使用全局对象。

1
2
3
4
5
var X = ['a', 'b', 'c'];
global.x = X;

console.log(x);
//['a', 'b', 'c']


我同意不使用任何全球全球全球命名空间设置浴是实践和不使用它在所有的理论(理论的操作是在Word)。然而,(是的,我做的IT业务)使用自定义错误设置类:

1
2
3
// Some global/config file that gets called in initialisation

global.MyError = [Function of MyError];

是的,这里的禁忌,但如果你的网站/项目使用自定义错误在广场上,你会需要它的地方是定义,或至少一个:

  • 类定义的误差在第一位
  • 在脚本在你改变它
  • 在脚本在你抓住它
  • 定义自定义错误我在全球命名空间拯救我我的客户需要的纽约大学图书馆等错误。成像误差在那吗,自定义自定义错误是未定义的。

    因此,太,如果这是错误的,然后请让我知道。我只刚刚开始做…