node.js global variables?
我在这里问:node.js需要继承吗?
有人告诉我,我可以通过省略var来设置全局范围的变量。
这对我不起作用。
IE:
1 | _ = require('underscore'); |
不能在所需文件上使用。我可以用Express的
有人能证实这是可行的吗?谢谢。
在全局变量节点集,你可以通过"全球"或"全球"对象:
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: {} } */ |
*注:"全球的安全设置。_",你应该只是做
在每一个有规则的例外。我是一个非常精确的时间,我需要设置"全球。_"。我是创建一个定义文件系统的"配置",这是基本的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. |
什么样
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]; |
是的,这里的禁忌,但如果你的网站/项目使用自定义错误在广场上,你会需要它的地方是定义,或至少一个:
定义自定义错误我在全球命名空间拯救我我的客户需要的纽约大学图书馆等错误。成像误差在那吗,自定义自定义错误是未定义的。
因此,太,如果这是错误的,然后请让我知道。我只刚刚开始做…