Düğümde, global değişkenleri "global" veya "GLOBAL" nesnesi üzerinden ayarlayabilirsiniz:
GLOBAL._ = require('underscore'); // but you "shouldn't" do this! (see note below)
ya da daha fazlası ...
GLOBAL.window = GLOBAL; // like in the browser
Düğüm kaynağından, bunların birbirine takma olduğunu görebilirsiniz:
node-v0.6.6/src/node.js:
28: global = this;
128: global.GLOBAL = global;
Yukarıdaki kodda "bu" genel bağlamdır. CommonJS modül sistemiyle (hangi düğüm kullanılır), bir modülün içindeki "bu" nesne (yani, "kodunuz") genel bağlam DEĞİLDİR. Bunun kanıtı için aşağıya "bu" nesneyi ve sonra dev "GLOBAL" nesnesini yazdığım yere bakın.
console.log("\nTHIS:");
console.log(this);
console.log("\nGLOBAL:");
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: {} }
*/
** Not: "GLOBAL._" ayarı ile ilgili olarak, genel olarak yapmanız gerekir var _ = require('underscore');
. Evet, bunu Java'da yaptığınız gibi alt çizgi kullanan her dosyada yaparsınız import com.foo.bar;
. Bu, dosyalar arasındaki bağlantılar 'açık' olduğundan, kodunuzun ne yaptığını anlamayı kolaylaştırır. Hafif sinir bozucu, ama iyi bir şey. .... Bu vaaz.
Her kuralın bir istisnası vardır. "GLOBAL._" ayarlamam gereken tam olarak BİR örneğim vardı. Ben temelde JSON, ama biraz daha esneklik sağlamak için "JS'de yazılmış" "config" dosyaları tanımlamak için bir sistem oluşturuyordu. Bu tür yapılandırma dosyaları hiçbir 'gerektiriyor' ifadeleri vardı, ama onları alt çizgi erişimi olmasını istedim (ENTIRE sistemi alt çizgi ve alt çizgi şablonları üzerinde tahmin edildi), bu yüzden "config" değerlendirmeden önce "GLOBAL._" ayarlayın. Yani evet, her kural için bir yerde bir istisna var. Ama iyi bir nedeniniz olsa iyi olur ve sadece '' zorunlu '' yazmaktan yorulmam, böylece konvansiyondan kopmak istiyorum.