Node.js 글로벌 변수
질문: Node.js는 상속이 필요합니까?
그리고 변수를 생략하면 글로벌 스코프에 변수를 설정할 수 있다고 들었습니다.
이건 나한테 맞지 않아.
즉, 다음과 같은 경우,_
필수 파일에서 사용할 수 있습니다.
_ = require('underscore');
Express.js로 설정할 수 있습니다.app.set
다른 곳에서도 사용할 수 있습니다.
원래 이렇게 하는 거야?
다음과 같이 사용할 수 있습니다.
global._ = require('underscore')
Node.js에서는 "global" 또는 "GLOBAL" 개체를 통해 글로벌 변수를 설정할 수 있습니다.
GLOBAL._ = require('underscore'); // But you "shouldn't" do this! (see note below)
더 유용하게...
GLOBAL.window = GLOBAL; // Like in the browser
Node.js 소스로부터, 이것들은 서로 에일리어스 되어 있는 것을 알 수 있습니다.
node-v0.6.6/src/node.js:
28: global = this;
128: global.GLOBAL = global;
위의 코드에서 "this"는 글로벌 컨텍스트입니다.공통으로JS 모듈 시스템(Node.js가 사용하는 것), 모듈 내부의 "이" 객체(즉, "당신의 코드")는 글로벌 컨텍스트가 아닙니다.이에 대한 증거는 아래에서 "this" 오브젝트와 거대한 "GLOBAL" 오브젝트를 분출하는 위치를 참조하십시오.
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: {} }
*/
** 주의: "GLOBAL" 설정에 대해_", 일반적으로 다음과 같이 해야 합니다.var _ = require('underscore');
네, Java에서처럼 Underscore.js를 사용하는 모든 파일에서 이 작업을 수행합니다.import com.foo.bar;
파일 간의 연결은 '명시적'이므로 코드가 무엇을 하고 있는지 쉽게 파악할 수 있습니다.좀 귀찮지만 다행이다.그게 설교야.
모든 규칙에는 예외가 있다."GLOBAL"을 설정해야 하는 경우가 딱 한 번 있었습니다._." 기본적으로 JSON이지만 좀 더 유연하게 하기 위해 JavaScript로 작성된 "구성" 파일을 정의하는 시스템을 만들고 있었습니다.이러한 구성 파일에는 '필수' 문장이 없지만 Underscore.js(시스템 전체가 Underscore.js 및 Underscore.js 템플릿에 기반)에 액세스할 수 있도록 하고 싶었기 때문에 "구성"을 평가하기 전에 "GLOBAL"을 설정합니다."그래, 모든 규칙에는 예외가 있어.하지만 "필수 입력에 싫증이 나서 인습과 단절하고 싶다"는 것 말고 좋은 이유가 있어야 한다.
GLOBAL 키워드를 사용하는 다른 솔루션은 프로젝트가 커졌을 때 유지/가독성(+네임스페이스 오염 및 버그)을 유지하는 악몽입니다.나는 이런 실수를 여러 번 보았고 그것을 수정하는 데 애를 먹었다.
JavaScript 파일을 사용하여 모듈내보내기를 사용합니다.
예:
globals.js 파일
var Globals = {
'domain':'www.MrGlobal.com';
}
module.exports = Globals;
그런 다음 require를 사용하십시오.
var globals = require('globals'); // << globals.js path
globals.domain // << Domain.
를 사용합니다.global.MYAPI = {}
:
global.MYAPI._ = require('underscore')
다른 모든 포스터들은 관련된 나쁜 패턴에 대해 이야기한다.따라서 이러한 설명은 차치하고 변수를 글로벌하게 정의하는 가장 좋은 방법(OP의 질문)은 네임스페이스를 사용하는 것입니다.
글로벌 오브젝트를 사용하면 됩니다.
var X = ['a', 'b', 'c'];
global.x = X;
console.log(x);
//['a', 'b', 'c']
글로벌/글로벌 네임스페이스를 글로벌하게 설정하기 위해 사용하는 것은 나쁜 관행이며 이론상으로는 전혀 사용하지 않는다는 것에 동의합니다(이론적으로는 유효한 단어입니다).단, (요원) 커스텀에러 클래스 설정에 사용합니다.
// Some global/configuration file that gets called in initialisation
global.MyError = [Function of MyError];
네, 여기서는 금기사항이지만 사이트/프로젝트 전체에서 커스텀 에러가 사용되고 있는 경우는 기본적으로 모든 장소에서, 또는 적어도 다음 목적을 위해 정의할 필요가 있습니다.
- 애초에 에러 클래스를 정의합니다.
- 네가 던지는 대본에서
- 그걸 잡고 있는 대본에서
글로벌 네임스페이스에서 커스텀 오류를 정의하면 고객 오류 라이브러리를 필요로 하는 번거로움이 줄어듭니다.사용자 지정 오류가 정의되지 않은 위치에 사용자 지정 오류를 보내는 이미지입니다.
글로벌하게 스트링에 액세스하려는 경우dotenv
:
설치 대상:
npm i dotenv
다음 이 보세요..env
프로젝트의 루트 디렉터리에 있는 모든 변수를 글로벌하게 설정할 수 있습니다.하다
DB_HOST='localhost'
DB_DATABASE='my_database'
DB_USER='my_user'
DB_PASSWORD='my_password'
ADMIN_EMAIL='foo@bar.baz'
CITY='Some city'
# ... etc
서버를 기동할 때는, 커맨드 라인 마다 다음의 변수를 설정할 수도 있습니다.
NODE_ENV=dev PORT=5000 npm run start-dev
git을 에는 git, git을 하는 것이 좋습니다..env
your .gitignore
중요한 정보를 실수로 범하지 않도록 하기 위해서입니다.
이 글의 .server.js
최초로 file(파일)
require('dotenv').config()
에서 이러한 하려면 , 「」를 합니다.process.env.VARIABLE_NAME
.
예를 들어 다음과 같습니다.
app.listen(process.env.PORT, () => {
console.log(`Server is running on port ${process.env.PORT}.`)
})
주의: Underscore.js가 아닌 문자열을 글로벌하게 저장하는 것이기 때문에 질문에 직접 답변하지 않는 것은 이해하지만, 완전성을 위해 포함하려고 합니다.
언급URL : https://stackoverflow.com/questions/5447771/node-js-global-variables
'source' 카테고리의 다른 글
Java 속성 파일에 여러 줄의 코멘트를 추가할 수 있습니까? (0) | 2022.10.19 |
---|---|
단일 인스턴스 Java 애플리케이션을 구현하려면 어떻게 해야 합니까? (0) | 2022.10.19 |
리스트 이해와 맵 (0) | 2022.10.19 |
"무시 삽입" vs "삽입...중복된 키 업데이트 시" (0) | 2022.10.19 |
Fetch를 사용하여 x-ww-form-urlencoded 요청을 POST하려면 어떻게 해야 합니까? (0) | 2022.10.19 |