Node js глобал хувьсагч. NodeJS. Глобал объект. Файл унших, бичих

Зангилаанд та "global" эсвэл "GLOBAL" объектыг ашиглан глобал хувьсагчдыг тохируулж болно:

ГЛОБАЛ._ = шаардах("доод зураас"); // гэхдээ та үүнийг "хийх ёсгүй"! (доорх тэмдэглэлийг үзнэ үү)

эсвэл илүү ашигтай ...

GLOBAL.window = ГЛОБАЛ; // хөтөч дээрх шиг

Зангилаанаас та тэдгээрийг хооронд нь оёж байгааг харж болно.

Node-v0.6.6/src/node.js:28:global = энэ; 128: global.GLOBAL = глобал;

Дээрх кодонд "энэ" нь дэлхийн контекст юм. commonJS модулийн хувьд (зангилаа ашигладаг) модулийн доторх энэ "объект" (жишээ нь "таны код") нь дэлхийн контекст БИШ. Үүнийг нотлохын тулд "энэ" объектыг, дараа нь аварга том "GLOBAL" объектыг хаана гаргасныг доороос харна уу.

Console.log("\nЭНЭ:"); console.log(энэ); console.log("\nГЛОБАЛ:"); console.log(дэлхий); /* гаралт ... ЭНЭ: {} ГЛОБАЛ: ( ArrayBuffer: , Int8Array: ( BYTES_PER_ELEMENT: 1 ), Uint8Array: ( BYTES_PER_ELEMENT: 1 ), Int16Array: ( BYTES_PER_ELEMENT: 2 ), Uint16Array: ( BYTES_PER_ELEMENT ), Int_2EMENT: (BYTES_PER_ELEMENT: TE_2EMENT : Uint : 2EMENT ), 32Масив: ( _элемент тутамд BYTES_: 4 ), Float32Array: ( BYTES_PER_ELEMENT: 4 ), Float64Array: ( BYTES_PER_ELEMENT: 8 ), DataView: , global: , process: ( EventEmitter: , title: "node", assert: , version: "v0.6.5 all", _tic , moduleLoadList: [ "Binding evaals", "Binding natives", "NativeModule events", "NativeModule buffer", "Binding buffer", "NativeModule assert", "NativeModule util", "NativeModule path", "NativeModule module", " NativeModule fs, "Binding fs", "Binding тогтмолууд", "NativeModule урсгал", "NativeModule консол", "Binding tty_wrap", "NativeModule tty", "NativeModule net", "NativeModule timers", "Binding timer_wrap", " NativeModule _linklist" ], хувилбарууд: ( зангилаа: "0.6.5", v8: "3.6.6.11", ares: "1.7.5-DEV", uv: "0.6", openssl: "0.9.8n" ), nextTick : , stdout: , arch: "x64", stderr: , платформ: "darwin", argv: [ "зангилаа", "/workspace/zd/zgap/darwin-js/index.js" ], stdin: , env: ( TERM_PROGRAM: "iTerm.app", "COM_GOOGLE_CHROME_FRAMEWORK_SERVICE_PROCESS/USERS/DDOPSON/LIBRARY/APPLICATION_SUPPORT/GOOGLE/CHROME_SOCKET": "/tmp/launch-n-nl-scket", SHBINVO: "/tmp/launch-n-nl-scket":ELL/Socket,/" ш" , TMPDIR: "/var/folders/2h/2hQmtmXlFT4yVGtr5DBpdl9LAiQ/-Tmp-/", Apple_PubSub_Socket_Render: "/tmp/launch-9Ga0PT/Render", ХЭРЭГЛЭГЧ: "ddopson", COMMAND_MODE: "unix:AUX3", SSHOCK/ эхлүүлэх -sD905b/Сонсогчид", __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: "Өгөгдмөл", SHLVL: "1", COLORFGBG: "7;0", НҮҮР : "/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: , гарах: , pid: 10321, онцлогууд: (дибаг: худал, uv: үнэн, ipv6: үнэн, tls_npn: худал, tls_sni: үнэн, tls : үнэн ), kill: , execPath: "/usr/local/bin/node", addListener: , _needTickCallback: , on: , removeListener: , reallyExit: , chdir: , дибаг: , алдаа: , cwd: , watchFile: , umask : , getuid: , unwatchFile: , mixin: , setuid: , setgid: , createChildProcess: , getgid: , өвлөнө: , _kill: , _byteLength: , mainModule: ( id: ". ", экспорт: (), эцэг эх: null, файлын нэр: "/workspace/zd/zgap/darwin-js/index.js", ачаалагдсан: худал, гарсан: худал, хүүхдүүд: , замууд: ), _debugProcess: , dlopen: , ажиллах хугацаа: , санах ойн ашиглалт: , uvCounters: , холбох: ), GLOBAL: , root: , Буфер: ( poolSize: 8192, isBuffer: , byteLength: , _charsWritten: 8 ), setTimeout: , setIntervalout: , clearTime, консол: , цонх: , хөтөч: () ) */

**Тэмдэглэл: "GLOBAL._" тохиргооны хувьд ерөнхийдөө var _ = require("доогуур зураас"); . Тийм ээ, та Java дээр com.foo.bar импорт хийдэг шиг доогуур зураас ашигладаг файл бүрт үүнийг хийдэг; . Энэ нь файлуудын хоорондох холбоосууд нь "тодорхой" байдаг тул таны код юу хийж байгааг тодорхойлоход хялбар болгодог. Бага зэрэг ядаргаатай, гэхдээ сайн. Энэ бол номлол юм.

Дүрэм болгонд үл хамаарах зүйл байдаг. Надад "GLOBAL._"-г тохируулах шаардлагатай яг нэг тохиолдол байсан. Би "тохируулгын" файлуудыг тодорхойлох системийг бий болгож байсан бөгөөд тэдгээр нь ихэвчлэн JSON боловч уян хатан байдлыг нэмэгдүүлэхийн тулд "JS дээр бичигдсэн" байв. Ийм тохиргооны файлуудад "шаардлагатай" хэллэг байхгүй байсан ч би тэдгээрийг доогуур зураасанд хандахыг хүссэн (БҮХэл систем нь доогуур зураас болон доогуур зураасын загвар дээр суурилдаг байсан) тул би "тохиргоо"-г үнэлэхээсээ өмнө "GLOBAL._" гэж тохируулсан. Тийм ээ, дүрэм болгонд хаа нэгтээ үл хамаарах зүйл байдаг. Гэхдээ чамд сайн шалтгаан байгаа болохоос биш "бичиж ядаж байна" гэхээс илүүтэй би гэрээгээ зөрчихийг хүсч байна."

JavaScript нь Global Object хэмээх тусгай объекттой бөгөөд энэ болон түүний бүх шинж чанаруудад програмын хаанаас ч хандах боломжтой, глобал хувьсагч.

JavaScript хөтөч нь ихэвчлэн глобал цонхны объект, Node.js глобал объект нь глобал объект, бүх глобал хувьсагч (дэлхийн өөрөөс бусад) нь глобал объектын эзэмшдэг.

Node.js дээр бид глобал өмчид шууд хандах боломжтой бөгөөд үүнийг програмд ​​оруулах шаардлагагүй.

Глобал объект ба глобал хувьсагч

Дэлхийн хамгийн үндсэн үүрэг бол глобал хост хувьсагч юм. ECMAScript-ийн тодорхойлолтоор дараах нөхцөлүүд нь глобал хувьсагч юм:

  • Гадаад хувьсагч тодорхойлогдсон;
  • Глобал объектын шинж чанарууд;
  • Хувьсагч нь далд байдлаар тодорхойлогддог (тодорхойгүй хувьсагчдад шууд хуваарилалт).

Глобал хувьсагчийг тодорхойлоход хувьсагч нь мөн глобал объектын өмч болох ба эсрэгээр. Бүх хэрэглэгчийн код нь одоогийн модулийн нэг хэсэг бөгөөд модуль нь өөрөө гадаад контекст биш тул Node.js дээр та хувьсагчдыг гадаад контекстээр тодорхойлох боломжгүй гэдгийг анхаарна уу.

Жич:Глобал хувьсагч нь нэрийн орон зайг бохирдуулж, харилцааны кодын эрсдэлийг нэмэгдүүлдэг тул глобал хувьсагчийг оруулахаас зайлсхийхийн тулд хувьсагчийг тодорхойлохдоо var-г үргэлж ашигладаг.

__ файлын нэр

__filename нь одоо ажиллаж байгаа скриптийн файлын нэрийг зааж өгдөг.Гаралтын файл байх байршилд хүрэх үнэмлэхүй зам боловч командын мөрийн сонголт болон файлын нэрийг зааж өгөх нь ижил байх албагүй. Хэрэв модульд байгаа бол буцаасан утга нь модулийн файлд хүрэх зам болно.

жишээнүүд

// 输出全局变量 __файлын нэр 的值 console.log(__файлын нэр);

$ node main.js /web/com/w3big/nodejs/main.js

__ нэр

__dirname нь одоо байгаа скриптийн санг илэрхийлдэг.

жишээнүүд

main.js файл үүсгээд дараах байдлаар кодчил.

// 输出全局变量 __dirname 的值 console.log(__dirname);

main.js гүйцэтгэх файлын код нь дараах байдалтай байна.

$ node main.js /web/com/w3big/nodejs

setTimeout(CB, ms)

setTimeout(C - Би, мс): SetTimeout() функцийг зөвхөн нэг удаа зааж өгсөн.

Энэ нь таймерыг илэрхийлэх бариулын утгыг буцаана.

жишээнүүд

main.js файл үүсгээд дараах байдлаар кодчил.

Функц printHello())( console.log("Сайн уу, Дэлхий!"); ) // setTimeout(printHello, 2000);

main.js гүйцэтгэх файлын код нь дараах байдалтай байна.

$ node main.js Сайн байна уу, Дэлхий!

clearTimeout(t)

clearTimeout(t) нь таймер үүсгэхийн тулд setTimeout()-г дамжуулахаас өмнө глобал функцийг зогсооход хэрэглэгддэг.Параметр Тооцоологч үүсгэхийн тулд T функц setTimeout().

жишээнүүд

main.js файл үүсгээд дараах байдлаар кодчил.

Функц printHello())( console.log("Сайн уу, Дэлхий!"); ) // var t = setTimeout(printHello, 2000); // 清除定时器 clearTimeout(t);

main.js гүйцэтгэх файлын код нь дараах байдалтай байна.

$nodemain.js

setInterval(CB, ms)

setInterval(C - Би, мс)Глобал функц нь заасан функцийг заасан миллисекундын (мс) тооны (CB) дараа гүйцэтгэдэг.

Энэ нь таймерыг илэрхийлэх бариулын утгыг буцаана. Та функцийг ашиглаж болно clearInterval(T) таймерыг арилгах.

setInterval() арга нь clearInterval() дуудагдах эсвэл цонх хаагдах хүртэл функцийг дуудсаар байх болно.

жишээнүүд

main.js файл үүсгээд дараах байдлаар кодчил.

Функц printHello())( console.log("Сайн уу, Дэлхий!"); ) // setInterval(printHello, 2000);

main.js гүйцэтгэх файлын код нь дараах байдалтай байна.

$ node main.js Сайн байна уу, Дэлхий! Сайн уу, Дэлхий! Сайн уу, Дэлхий! Сайн уу, Дэлхий! Сайн уу, Дэлхий! ......

Дээрх программ нь хоёр секунд тутамд нэг удаа "Сайн уу, Дэлхий!" гэж гарч ирэх бөгөөд товчлуур дарах хүртэл тасралтгүй ажиллана. CTRL + C.

консол

Консол нь Internet Explorer дээрх JScript хөдөлгүүрийн дибаг хийх хэрэгсэл болох стандарт гаралтыг хангах консол бөгөөд хожим нь де факто стандарт хөтөч болсон.

Node.js нь энэхүү стандартыг дагаж мөрдөж, стандарт гаралтын урсгал (STDOUT) эсвэл стандарт алдааны урсгал (STDERR) гаралтын тэмдэгтүүдэд ашигласан консолын объектын тогтвортой байдал, зуршлыг баталгаажуулдаг.

консолын арга

Консолын объектыг доор харуулав.

ҮгүйАрга, тайлбар
1 console.log([өгөгдөл] [, ... ])
Стандарт хэвлэх боломжтой гаралтын тэмдэгтүүдийн хувьд шинэ мөрийн тэмдэгтээр төгсдөг. Энэ арга нь хэд хэдэн параметрийг хүлээн авдаг бөгөөд хэрэв зөвхөн нэг параметр байгаа бол гаралт нь энэ параметрийн мөр болно. Хэрэв олон аргумент байгаа бол командын гаралтын формат гэх мэт газруудыг C E().
2 console.info([өгөгдөл] [, ... ])
Командын P үүрэг нь мэдээллийн мессежийг буцаана, console.log команд нь тийм ч их ялгаагүй, хромоос гадна зөвхөн текст гарч ирэх болно, үлдсэн хэсэг нь цэнхэр өнгийн анхаарлын тэмдэг харуулах болно.
3 console.error([өгөгдөл] [, ... ])
Гаралтын алдааны мэдээ. Сэрээний алдаа гарах үед консол улаанаар харуулах болно.
4 console.warn([өгөгдөл] [, ... ])
Анхааруулах мессеж гарч ирнэ. Консол нь шар өнгийн анхаарлын тэмдэгтэй харагдана.
5 console.dir(OBJ[, сонголт])
Шалгалт (шалгалт) хийхэд ашигладаг объект бөгөөд уншихад хялбар дэлгэц, хэвлэх формат.
6 console.time (товчлол)
Цаг гаралт, эхлэх цаг.
7 console.timeEnd(товчлол)
Төгсгөлийн цаг, энэ нь цаг хугацааны төгсгөлийг илэрхийлдэг.
8 console.trace(мессеж [, ...])
Код нь одоогоор дуудлагын замыг стек дээр хэрэгжүүлж байгаа бөгөөд энэ тестийн функцийг ажиллуулах нь ашигтай, зүгээр л мөрөнд console.trace-ээр холбогдсон функцийг шалгахыг хүсч байна.
9 console.assert(утга[, мессеж][, ...])
Хувьсагч эсвэл илэрхийлэл үнэн эсэхийг тодорхойлохын тулд хоёр параметр шаардлагатай байсан бөгөөд эхний параметр нь илэрхийлэл, хоёр дахь аргумент нь мөр юм. Зөвхөн эхний аргумент худал бол гаралт нь хоёр дахь аргумент болох бөгөөд энэ нь үр дүнгүй болно.
console.log(): Стандарт гаралт руу хэвлээд шинэ мөрөөр дуусгана.

console.log нь олон параметрүүдийг хүлээн зөвшөөрдөг, хэрэв зөвхөн нэг параметр байгаа бол тухайн параметрийн гаралтын мөр. Хэрэв олон аргумент байгаа бол командын гаралтын формат гэх мэт газруудыг C E().

Эхний параметр нь мөр, ямар ч параметр байхгүй, зүгээр л шинэ мөрийн тэмдэгтийг хэвлэнэ.

Console.log("Сайн уу ертөнц"); console.log("byvoid%diovyb"); console.log("byvoid%diovyb", 1991);

Сайн уу ертөнц byvoid%diovyb byvoid1991iovyb

  • console.error(): console.log()-ийн тусламжтайгаар энэ нь ижил зүйлийг хийдэг боловч стандарт алдаа гаргадаг.
  • console.trace(): Одоогийн дуудлагын стекийн стандарт гаралт руу алдааг дамжуулах.
console.trace();

Үйл ажиллагааны үр дүн дараах байдалтай байна.

Мөр: Объект дээр. (/home/byvoid/consoletrace.js:1:71) Module._compile (module.js:441:26) дээрээс Object..js (module.js:459:10) дээрээс Module.load (module.js: 348:31) Function._load (module.js:308:12) дээр Array.0 (module.js:479:10) дээр EventEmitter._tickCallback (node.js:192:40)

жишээнүүд

main.js файл үүсгээд дараах байдлаар кодчил.

Console.info("程序开始执行:"); var counter = 10; console.log("计数: %d", тоолуур); console.time("获取数据"); // // 执行一些代码 // console.timeEnd("获取数据"); console.info("程序执行完毕。")

main.js гүйцэтгэх файлын код нь дараах байдалтай байна.

$ node main.js 程序开始执行:计数: 10获取数据: 0ms 程序执行完毕

үйл явц

Процесс нь глобал хувьсагч, атрибут нь глобал объект юм.

Энэ нь Node.js объектын одоогийн үйл явцын төлөвийг тодорхойлоход хэрэглэгддэг бөгөөд үйлдлийн системд энгийн интерфейсээр хангадаг. Ихэвчлэн та өөрийн командын мөрийн програмуудыг бичээд эцэст нь үүнтэй харьцдаг. Доор гишүүдийн эсэргүүцэх үйл явцын хамгийн түгээмэл хэрэглэгддэг аргуудыг танилцуулах болно.

ҮгүйҮйл явдал ба тайлбар
1 гарах
Процесс зогсоход бэлэн болсон үед гал асаана.
2 Гарахаас өмнө
Энэ үйл явдал нь зангилаа хоосон үйл явдлын давталттай үед идэвхждэг бөгөөд өөр арга хэмжээ авдаггүй. Ерөнхийдөө гаралтын зангилаа зохион байгуулах процесс байхгүй, гэхдээ "Exit-ээс өмнө" сонсогчдыг асинхроноор дуудаж болох тул зангилаа үргэлжлэх болно.
3 баригдаагүйException
Үл хамаарах зүйл үйл явдлын давталт руу буцах үед энэ үйл явдлыг нэмэгдүүлнэ. Хэрэв та үл хамаарах зүйлд монитор нэмбэл анхдагч үйлдэл (стек хэвлэх, гарах) гарахгүй.
4 Дохио нь хэзээ үүснэ
үйл явдалпроцесс дохио хүлээн авах үед.
SIGINT, SIGUSR1 гэх мэт стандарт POSIX дохионы нэрсийн жагсаалтыг шалгана уу.

жишээнүүд

main.js файл үүсгээд дараах байдлаар кодчил.

Process.on("гарц", функц(код) ( // setTimeout(function() ( console.log("该代码不会执行"); 0); console.log("退出码为:", код) ;))) console.log("程序执行结束");

main.js гүйцэтгэх файлын код нь дараах байдалтай байна.

$ node main.js 程序执行结束退出码为: 0

Гаралтын төлөвийн кодууд

Гарах төлөвийн кодууд дараах байдалтай байна.

Статусын кодГарчиг ба тайлбар
1 Баригдаагүй үхлийн онцгой тохиолдол
Баригдаагүй онцгой тохиолдол байгаа бөгөөд үүнийг зохицуулаагүй эсвэл uncaughtException зохицуулагчийн домэйн.
2 ашиглагдаагүй
хадгалах
3 JavaScript дотоод алдааны шинжилгээ
Зангилааны процесс эхлэх үед JavaScript алдаа задлан шинжлэх эх код дуудагдана. Маш ховор, зөвхөн Node үед.
4 Дотоод JavaScript алдаа оноо
Эх зангилааг ажиллуулж буй JavaScript процесс нь функцийг үнэлэх үед бүтэлгүйтлийг буцаана. Маш ховор, зөвхөн Node үед.
5 Гайхалтай алдаа
V8 нь засч залруулах боломжгүй алдаа гарсан бөгөөд үхлийн үр дагавартай. Ихэвчлэн Stderr хэвлэх, агуулга: үхлийн алдаа
6 Функциональ бус дотоод онцгой байдлын зохицуулагч
Баригдаагүй онцгой тохиолдол, доторх онцгой байдлын зохицуулагчийг ямар нэгэн байдлаар функцэд тохируулсан бөгөөд дуудах боломжгүй.
7 Дотоод ажиллах цагийн зохицуулагчийн онцгой тохиолдлын алдаа
Баригдаагүй онцгой тохиолдол, мөн өөрийн зохицуулах онцгой тохиолдол зохицуулагч нь онцгой тохиолдол үүсгэдэг. Жишээлбэл, хэрэв process.on("uncaughtException") эсвэл domain.on("error") нь үл хамаарах зүйл үүсгэдэг.
8 ашиглагдаагүй
хадгалах
9 Буруу аргумент
Энэ нь үл мэдэгдэх параметр эсвэл параметрийн утга байж болно.
10 Дотоод JavaScript ажиллах хугацаа амжилтгүй боллоо
JavaScript эх код нь Node процесст алдаа гарах үед үүсдэг ба маш ховор тохиолдолд зөвхөн Node програмыг хөгжүүлсэн үед үүсдэг.
12 Дибаг хийх аргумент буруу
--дибаг хийх сонголт ба/эсвэл --debug-BRK тохируулагдсан боловч буруу порт сонгосон.
> 128 Дохионы гаралт
Хэрэв зангилаа SIGKILL эсвэл SIGHUP гэх мэт аюултай дохиог хүлээн авбал буцах код нь дохионы код дээр 128 байна. Энэ бол стандарт Unix практик, гаралтын дохион дээрх өндөр код юм.

үйл явцын шинж чанарууд

Уг процесс нь олон ашигтай шинж чанарууд, харилцан үйлчлэлийн хялбар байдлыг хангадаг бөгөөд ингэснээр бид системийг илүү сайн хянах боломжтой болно.

Тоо ширхэг.Үл хөдлөх хөрөнгө ба тодорхойлолт
1 STDOUT
Стандарт гаралтын урсгал.
2 STDERR
Стандарт алдааны урсгал.
3 STDIN
Стандарт оролтын урсгал.
4 ARGV
ARGV шинж чанар нь командын мөрийн скриптийг зохиохдоо гүйцэтгэх янз бүрийн сонголтуудын массивыг буцаана. Эхний гишүүд нь үргэлж зангилаа, хоёр дахь гишүүн нь скрипт файлын нэр, үлдсэн гишүүд нь скрипт файлын параметрүүд юм.
5 execPath
Одоогийн скриптийн гүйцэтгэлийн хоёртын зангилааны үнэмлэхүй замыг буцаана.
6 execArgv
Скрипт файлын зангилааны гүйцэтгэгдэх командын мөрийн параметрүүдийн хооронд гүйцэтгэсэн тушаалын мөрийн скрипт дор байрлах массивын гишүүнийг буцаана.
7 ENV
Одоогийн бүрхүүлийн орчны хувьсагчийн гишүүд болох объектыг буцаана
8 Гарах код
Гарах кодыг заахгүйгээр процесс.exit() гаралтын процессыг танилцуулсан тохиолдолд гарах код.
9 хувилбар
v0.10.18 гэх мэт зангилааны хувилбар.
10 хувилбарууд
Зангилаа болон хамаарлын хувилбаруудыг агуулсан шинж чанар.
11 тохиргоо
Одоогийн зангилаа агуулсан объектыг гүйцэтгэгдэх JavaScript тохируулгын тохиргооны файлыг эмхэтгэхийн тулд ашигладаг. Энэ нь "config.gypi" файлаар үүсгэсэн run./configure скрипттэй ижил юм.
12 PID - зохицуулагч
Одоогийн үйл явцын дугаар.
13 Нэр
Процессын нэр, анхдагч "зангилаа", та утгыг өөрчлөх боломжтой.
14 нуман
Одоогийн CPU архитектур: "arm", "ia32" эсвэл "64".
15 платформ
"Дарвин", "FreeBSD", "Linux", "SunOS" эсвэл "win32" платформ байгаа програмыг ажиллуул.
16 үндсэн модуль
шаардах.гол өөр аргууд. Төрөл бүрийн цэгүүд, хэрэв үндсэн модуль ажиллах үед өөрчлөгдвөл require.main нь хуучин модуль руу буцаж унасаар байж болно. Хоёуланг нь нэг модульд харьяалагддаг гэж үздэг.

жишээнүүд

main.js файл үүсгээд дараах байдлаар кодчил.

// 输出到终端 process.stdout.write("Сайн уу Дэлхий!" + "\n"); // 通过参数读取 process.argv.forEach(функц(вал, индекс, массив) ( console.log(индекс + ": " + val; )); // 获取执行路局 console.log(process.execPath); // 平台信息 console.log(process.platform);

main.js гүйцэтгэх файлын код нь дараах байдалтай байна.

$ node main.js Сайн байна уу! 0: зангилаа 1: /web/www/node/main.js /usr/local/node/0.10.36/bin/node darwin

Аргын лавлах гарын авлага

Энэхүү үйл явц нь бидний интерактив системийг илүү үр дүнтэй хянахад туслах олон ашигтай аргуудыг өгдөг:

ҮгүйАрга, тайлбар
1 цуцлах()
Энэ нь тасалдлын зангилааны триггер үйл явдлыг нэмэгдүүлэх болно. Энэ нь зангилаанаас гарч, дамп файл үүсгэх болно.
2 ChDir (лавлах)
Хэрэв үйлдлээс гарах боломжгүй бол процессын одоогийн ажлын лавлахыг өөрчил.
3 чих ()
Одоогийн процессын ажлын лавлахыг буцаана
4 гарах([код])
Заасан кодоор үйл явцыг дуусгана. Хэрэв энэ параметрийг орхигдуулсан бол 0 кодыг ашиглана.
5 getgid()
Процессын бүлгийн таних тэмдэг авах (getgid(2)-г үзнэ үү). Бүлэг нэр гэхээсээ илүү дижитал ID худалдаж авсан үед.
6 setgid(ID)
Бүлгийг таних процессыг тохируулах (setgid (2)-г үзнэ үү). ID нь тоон эсвэл бүлгийн нэрийг авч болно. Хэрэв та бүлгийн нэрийг зааж өгвөл дижитал ID-г хүлээх хүртэл блоклохыг зөвшөөрнө.
Тайлбар: Энэ функцийг зөвхөн POSIX платформ дээр ашиглах боломжтой (жишээ нь: Windows болон Android бус).
7 getuid()
Хэрэглэгчийн таних процессыг авна уу (getuid(2)-г үзнэ үү). Энэ нь хэрэглэгчийн нэр биш харин тоон хэрэглэгчийн ID юм.
Тайлбар: Энэ функцийг зөвхөн POSIX платформ дээр ашиглах боломжтой (жишээ нь: Windows болон Android бус).
8 UIP (ID)
Процессын тохиргооны хэрэглэгчийн ID (UIP (2)-ыг үзнэ үү). Дижитал танигч эсвэл нэрийн мөрийг сэргээж байна. Хэрэв та бүлгийн нэрийг зааж өгвөл дижитал ID-г хүлээх хүртэл блоклохыг зөвшөөрнө.
Тайлбар: Энэ функцийг зөвхөн POSIX платформ дээр ашиглах боломжтой (жишээ нь: Windows болон Android бус).
9 getgroups()
Бүлгийн ID массивыг буцаах үйл явц. POSIX систем нь тийм гэсэн баталгаа өгөхгүй ч Node.js тэнд байх нь баталгаатай.
Тайлбар: Энэ функцийг зөвхөн POSIX платформ дээр ашиглах боломжтой (жишээ нь: Windows болон Android бус).
10 тохиргооны бүлгүүд
Процессын бүлгийн ID-г тохируулна уу. Энэ нь ажиллах боломжтой, танд супер хэрэглэгчийн эрх, эсвэл CAP_SETGID чадвартай байхад л хангалттай.
Тайлбар: Энэ функцийг зөвхөн POSIX платформ дээр ашиглах боломжтой (жишээ нь: Windows болон Android бус).
11 initgroups(хэрэглэгч, нэмэлт_бүлэг)
Унших / гэх мэт. /групп, бүлгийн хандалтын жагсаалтыг эхлүүлэхэд бүлгийн бүх гишүүд байрлана. Энэ нь ажиллах боломжтой, танд супер хэрэглэгчийн эрх, эсвэл CAP_SETGID чадвартай байхад л хангалттай.
Тайлбар: Энэ функцийг зөвхөн POSIX платформ дээр ашиглах боломжтой (жишээ нь: Windows болон Android бус).
12 алах (IDP [дохио])
Процесс руу дохио илгээдэг. ID нь процессын тодорхойлогч бөгөөд дохио нь дамжуулж буй дохиог харуулсан тэмдэгт мөр юм. Дохионы нэр нь "SIGINT" эсвэл "" SIGHUP гэх мэт мөрүүд юм. Хэрэв энэ параметрийг орхигдуулсан бол дохио нь "SIGTERM" болно.
13 Санах ойн ашиглалт()
Энэ нь зангилааны санах ойн төлөвийн байтаар хэрэглэгдэх процессыг дүрсэлсэн объектыг буцаана.
14 NextTick(буцаж залгах)
Одоогийн функцийг буцаан дуудсны дараа үйл явдлын давталт дуусна.
15 Умаск ([маск])
Процессын маск файлыг тохируулах эсвэл унших. Хүүхдийн үйл явц нь энэ маскыг эцэг эхийн үйл явцаас өвлөн авдаг. Хэрэв маскын аргумент үнэн бол хуучин маскыг буцаана. Үгүй бол энэ нь одоогийн маскыг буцаана.
16 зарцуулсан()
Зангилаа аль хэдийн эхлүүлсэн секундын тоог буцаана.
17 цаг хугацаа()
[секунд] массив наносекунд гэж заасан одоогийн үйл явцын цаг хугацааны нарийвчлал. Энэ нь өнгөрсөн аливаа үйл явдалтай холбоотой юм. Энэ утга нь огноотой ямар ч холбоогүй тул цагийн зөрүүнд нөлөөлөхгүй. Гол зорилго нь хөтөлбөрийн гүйцэтгэлийг тодорхой хугацаанд хэмжих явдал юм.
Үр дүнг одоогийн process.hrtime() руу шилжүүлэхээс өмнө энэ нь тэдгээрийн хоорондох хугацааны зөрүүг, лавлагаа болон хугацааны интервалын хэмжилтийг буцаана.

жишээнүүд

main.js файл үүсгээд дараах байдлаар кодчил.

// 输出当前目录 console.log("当前目录: " + process.cwd()); // 输出当前版本 console.log("当前版本: " + процесс.хувилбар); // 输出内存使用情况 console.log(process.memoryUsage());

NODE.JS– js-г гүйцэтгэх програм хангамжийн хэрэгсэл.

Nodejs = V8 + I/O + номын сан

V8: хурдан, орчин үеийн, хэмнэлттэй

Давуу тал

  • Javascript
  • Үйлчлүүлэгч болон сервер дээрх нийтлэг код
  • Вэбийн үндсэн даалгавар
  • Олон холболт, даалгавар зэрэг
  • Ажлын прототипийг бүтээхэд хялбар
  • Тохиромжтой npm багц менежер
  • Нийгэмлэг

Суурилуулалт

Суулгах үед nodejs нь PATH хувьсагч (+ npm) руу өөрийгөө бичдэг, [захиргаа - орчны хувьсагч]; тушаалын мөрөнд шалгаж болно:
PATH тохируулах

Дүрмээр бол файлуудыг nodejs-ийн дагуу ажиллуулдаг: энгийн скрипт бичээд командын мөрөөр ажиллуулъя:


Скрипт ажиллаж, үр дүн нь тушаалын мөрөнд харагдах болно.

Nodejs баримт бичиг

nodejs модулиуд

Суурилуулсан nodejs модулиуд хэрхэн ажилладагийг ойлгохын тулд та nodejs вэбсайтаас (эх код) эх кодын архивыг татаж авах хэрэгтэй. Тэгээд lib лавлах руу оч. (dir команд - командын мөрөөр файлуудын жагсаалтыг авах; Хэрэв та бүх дэд хавтсанд байгаа файлуудыг жагсаах шаардлагатай бол "dir" -ийн оронд "dir / s" -ийг ашиглана уу). Хэрэв та багцаас nodejs суулгасан бол lib хавтсанд ямар ч файл олдохгүй.

Nodejs нь янз бүрийн зэрэгтэй модулиудтай тогтвортой байдал. (жишээ нь, 0 - ашиглах ёсгүй; 1, 2 - ашиглаж болно, гэхдээ модулийн API өөрчлөгдөж болно).

Функцүүд нэмэгдэж байна (төсөл хөгжиж байна) бөгөөд цаг хугацаа өнгөрөхөд бид USER бүтээгч функцийг тусдаа файл руу шилжүүлэх шаардлагатай болно. Энд модулиуд гарч ирдэг.

Модуль нь nodejs-ийн төсөл зохион байгуулахад санал болгодог нэг төрлийн арга юм.

Төслүүд өсөх хандлагатай байдаг бөгөөд энэ нь төслийг хэд хэдэн файл болгон хуваах хүсэлд хүргэдэг - энэ нь модулиудад орж ирдэг.

шаарддаг

HTML хуудасны хувьд скриптийг оруулахын тулд скрипт хаягуудыг ашигладаг. Nodejs нь тусгай шаардах командтай.

Var user = require("./user");

Бидний жишээн дээр бид нэг директор дотор байгаа файлд (user.js) ханддаг (өргөтгөл (.js) нь сонголттой).

//шаардлагатай("./хэрэглэгч"); // .js-г зааж өгөх шаардлагагүй // энэ тохиолдолд файл ажиллах болно, гэхдээ USER хувьсагч байхгүй болно // энэ бол nodejs-ийн скрипт тагуудаас гол ялгаа юм // node.js-д функцууд болон хувьсагчид модуль бүрийн хувьд глобал // энэ файлын хувьд (модуль өөрөө) бөгөөд тэдгээр нь холбогдсон үед автоматаар // боломжтой болдоггүй (require("./user")) // Гэхдээ яаж хандах вэ? // Модуль бүр экспортын тусгай хувьсагчтай байдаг - энэ бол объект бөгөөд // Миний тавьсан зүйл нь үр дүнд нь буцаж ирэх болно require var user = require("./user.js"); // үр дүн: хэрэглэгч = (Хэрэглэгч: функц)

Nodejs модульчлагдсан систем ба хөтчийн скриптүүдийн хоорондох эхний ялгаа: хэрэв хөтөч дээр хоёр скрипт шошго байгаа бол тэдгээрийн аль нэгэнд нь глобал түвшинд тодорхойлсон функц нөгөөд байдаг боловч nodejs дээр байдаггүй. Nodej-д функц болон хувьсагч нь тухайн файлын хувьд глобал байдаг (шаардлагатай үед тэдгээр нь боломжгүй). Тиймээс nodejs нь жинхэнэ бие даасан модулиудыг бичих боломжийг олгодог. Гэхдээ модулийг ашиглах боломжтой байхын тулд үүнийг ашигладаг экспортын систем. Модуль бүр тусгай экспортын хувьсагчтай.

Модуль-лавлах DIR/индекс

Бид хавтсыг шууд холбодог var user = require("./user"); , харгалзах index.js-г агуулсан .

Жишээлбэл

Хэрэглэгч(нэр)( this.name = name; ) User.prototype.hello = function(who)( console.log(phrases.Hello + ", " + who.name); ); экспорт.Хэрэглэгч = Хэрэглэгч;

Бид ./server.js файл дахь Хэрэглэгчийн үүсгэгчийг холбож ашигладаг

//server.js var user = require("./user"); var vasya = шинэ хэрэглэгч.Хэрэглэгч("Вася");

"./" - одоогийн хавтастай харьцуулахад

экспорт нь объект бөгөөд шаардлагатай (exports.jpg) -ийн үр дүнд тэнд тавьсан зүйл нь буцаагдах болно. Ингэснээр модуль нь хувийн хувьсагч/функцуудаа зарлаж, зөвхөн шаардлагатай зүйлийг экспортлох боломжтой.


Глобал хувьсагчийн хувьд гэх мэт. глобал объект байна

Global.User = Хэрэглэгч;

Доод шугам

  • Холболт шаардлагатай
  • Хувьсагч: var (модульд зориулсан хувийн), экспорт, глобал (ховор хэрэглэгддэг)
  • Модулийн төрөл: js, node (.node өргөтгөлтэй), json (.json өргөтгөлтэй). Json модулиудыг файл дээр энгийн мэдээлэл хадгалах шаардлагатай үед ашигладаг.
  • Модуль-лавлах DIR/индекс

модулийн объект

  • модулийн объект
  • Модуль-функц module.exports = функц
  • Кэшлэх модулиуд (модуль дахин хэзээ ч уншихгүй)
  • Модулийн зохион байгуулалт: хайлтын дараалал
  • Дамжуулах параметрүүд: модуль-үйлдвэр

Модулийн объект (модулийн үндсэн объект) нь модуль бүрт байдаг хувьсагч юм (файл, та console.log(module;); гаргаж болно). . Агуулга: id шинж чанар - ихэвчлэн файлын зам,
эцэг эх - эцэг эхийн модулийн холбоос (module.parent - үүнийг шаарддаг эцэг эхийн модулийн холбоос),
хүүхдүүд (module.children - шаардлагатай холболтоор холбогдсон модулиуд),
эд хөрөнгө болон бусад .

Модуль эсвэл програм уу? модуль.эцэг эх

Модулийг шууд эхлүүлэх боломжтой, гэхдээ хэрэв үгүй ​​бол функц нь өөр модульд холбогдсон бол энэ функцийг экспортлохыг зөвшөөрнө үү. Эдгээр хоёр тохиолдлыг шалгах замаар салгаж болно:

If(module.parent) ( exports.run = run; ) else ( run(); )


ps: stackoverflow.com дээр хэлсэнчлэн эцэг эх нь скриптийг тайлбарлах гэж нэрлэдэг модуль юм.

// $ node foo.js console.log(module.parent); // null // require("./foo") console.log(module.parent); // (...)

module.exports-ийг зөв ашиглах

Модулийн хүрээнд:

module.exports = экспорт = энэ (эдгээр бүтэц нь тэнцүү)

Хэрэв та функцийг объект дотор биш, харин шууд дамжуулахыг хүсвэл дараах синтаксийг ашиглана уу.

Module.exports = Хэрэглэгч;


Модулийн кэш

Nodejs модулийг ачаалах үед энэ нь модулийн харгалзах объектыг (эцэг эх, экспорт болон бусад ижил төстэй шинж чанаруудыг харгалзан) бүрэн үүсгэж, өөрөө санах болно (module.id (файлын бүрэн зам) нь дотоод кэшийн танигч болдог. ) ба дараагийн удаа бид дурын модуль (файл) руу дахин хандах (холбох) үед nodejs кэшээс ижил объектыг авдаг. Жишээлбэл, модулийг файлд нэг удаа эхлүүлэхэд хангалттай бөгөөд ирээдүйд та үүнийг зүгээр л ашиглаж болно.

Манай тохиолдолд, for var db = require("../db");
and for var db = require("./db"); ижил объектыг авсан. Тиймээс зарчим нь дараах байдалтай байна: модулийг анх удаа ашиглах үед түүнийг эхлүүлж, ирээдүйд бид үүнийг зөвхөн холбож ашигладаг (өөрөөр хэлбэл манай тохиолдолд db.connect()-г хоёр удаа ашиглах шаардлагагүй, өөрөөр хэлбэл өөр файлд).


Модулийн зохион байгуулалт: модулиудын nodejs-д олдох дараалал

Тодорхой зам заалгүйгээр db-г хэрхэн үргэлж холбох вэ:

Var db = шаардлагатай("../db"); //эсвэл var db = require("./db");

мөн үүнтэй адил:

Var db = шаардлагатай("db");

db холбогдсон файлаас үл хамааран.

Үүнийг хийхийн тулд та nodejs дахь модулиудын хайлтын дарааллыг ойлгох хэрэгтэй (required гэж дуудагдах үед юу болдог). Nodej-д олон суулгасан модулиуд байдаг, жишээ нь require("fs"); , ямар ч асуудалгүйгээр холбогдох болно. Хэрэв та require-д тодорхой замыг зааж өгсөн бол, жишээ нь, require("../db"); , дараа нь хайлт нь өгөгдсөн зам дээр тулгуурлан файл олдох эсвэл nodejs энэ файлыг лавлах хэлбэрээр авахыг оролдох болно (мөн категори дотроос index.js хайна).

Хэрэв та require("db"); мөн модуль нь суулгаагүй бол node_modules лавлахыг одоогийн байрлалтай нь харьцуулан хайх болно (хэрэв олдвол модулийг түүнээс авахыг оролдох болно). Хэрэв node_modules лавлах байхгүй бол дээрээс node_modules лавлах гэх мэтийг хайх болно.

Модульд зориулсан тодорхой замыг зааж өгөхөөс гадна nodejs дараах модулиудыг хайж болно:

Npm-ийн танилцуулга - Node.JS-ийн багц менежер

  1. модулийн тухай мэдээлэл (нэр, хувилбар гэх мэт) агуулсан багцын тайлбар файл (package.json) үүсгэнэ. Гараар эсвэл тушаалаар
    npm init
    (шаардлагатай мэдээллийг асуух болно)
  2. Модуль нийтлэхийн тулд танд дараах зүйлс хэрэгтэй:
    1. npm adduser командыг ашиглан хэрэглэгч нэмнэ үү (та хэрэглэгчийн нэр болон нууц үгээ оруулах ёстой). Одоо npm-тэй хийсэн бүх ажлыг энэ хэрэглэгчийн нэрийн өмнөөс хийх болно. Хэрэглэгч https://www.npmjs.com/~name_user руу нэвтэрч, модулиудаа хянах боломжтой.
    2. Нийтлэл: npm publish
  3. Дараа нь хэн нэгэн таны мэдээллийн санд нэмсэн модулийг ашиглах боломжтой бөгөөд хэрэглэгч өөрөө өөрчлөлт хийх боломжтой.
  4. Npm тусламжийн командыг ашиглан бүх npm командыг аваарай
  5. Мэдээллийн сангаас модулийг хайх: npm s түлхүүр үг эсвэл npm хайлтын түлхүүр үг (жишээ нь, npm s супер модуль)
  6. Модулийг суулгана уу: npm install name_module эсвэл npm i name_module
  7. Модулиудыг суулгахдаа nodejs эхлээд одоогийн лавлахаас node_modules хавтсыг хайж олох (дараа нь илүү өндөр ба түүнээс дээш гэх мэт), эсвэл (хэрэв node_modules байхгүй бол) package.json (мөн дээшээ явдаг; package.json нь ихэвчлэн язгуурыг илэрхийлдэг) хайдаг. төсөл) ба үүний дагуу package.json олдвол харгалзах директор дотор node_modules хавтас үүсгэнэ; Хэрэв хоёр сонголт амжилтгүй болвол nodejs одоогийн директор дотор node_modules хавтас үүсгэнэ. Хэрэв та модулийг тодорхой директорт байрлуулахыг хүсвэл тухайн директор дотор node_modules хавтас үүсгэх хэрэгтэй.
  8. npm up update module (node_modules хавтсанд байгаа шинэчлэлтийн модулиудыг шалгах болно)
  9. npm модулийн нэрийг устгах (модуль устгах)

npm-ийн гаралт:

npm init
nmp нэмэгч
npm нийтлэх
npm хайлтын түлхүүр үгс
npm суулгах модуль
npm шинэчлэх модуль
npm устгах модуль
npm тусламжийн тушаал

NPM багцын бүтэц

Шаардлагатай хувилбарыг суулгах, жишээлбэл: npm i [имэйлээр хамгаалагдсан]

Хэрэв модулийг git хувилбарын систем, жишээлбэл, github дээр хөгжүүлсэн бол модулийн хамгийн сүүлийн хувилбарыг авах боломжтой. Зөвхөн Git-ыг уншихад хангалттай (url): https://github.com/strongloop/express.git ба консол дээр:

npm би https://github.com/strongloop/express.git

package.json дахь хамаарал

хамаарал нь үүнээс хамаарах модулиудыг заадаг.

хөгжүүлэгч хамаарал

Хэрэв модулийг хараат байдлаар татсан бол devDependencies-д бүртгэгдсэн модулиудыг суулгахгүй. Тэдгээрийг зөвхөн хөгжүүлэлтийн зорилгоор суулгасан бөгөөд жишээлбэл, та node_modules хавтас дахь модуль руу орж npm i (эсвэл npm тохиргооны тугийг тохируулснаар) оруулбал суулгаж болно.

үндсэн талбар нь багц руу орох цэгийг зааж өгдөг

Глобал модулиуд

Хэрэв та -g туг: npm -g модулийг тохируулбал ямар ч модулийг дэлхий даяар суулгаж болно

Глобал гэдэг нь системийн лавлах гэсэн үг.

Цонхны глобал модулиудын лавлах:

C:\users\User_Name\AppData\Roaming\npm

Глобал модулиудыг стандарт системийн лавлах хэсэгт байрлуулна. Package.json-д байгаа хоёртын файлуудыг системийн зам дээр суулгах болно (энэ нь глобал модулиудын гол хэрэглээ), өөрөөр хэлбэл ирээдүйд тэдгээрийг консолоор дамжуулан дуудаж болно.

И.Канторын курсуудын материал дээр үндэслэсэн

Зангилаанд та "global" эсвэл "GLOBAL" объектоор дамжуулан глобал хувьсагчдыг тохируулж болно:

ГЛОБАЛ._ = шаардах("доод зураас"); // гэхдээ та үүнийг "хийх ёсгүй"! (доорх тэмдэглэлийг үзнэ үү)

эсвэл илүү ашигтай ...

GLOBAL.window = ГЛОБАЛ; // хөтөч дээрх шиг

Зангилааны эх сурвалжаас та тэдгээр нь бие биенийхээ нэрс болохыг харж болно:

Node-v0.6.6/src/node.js:28:global = энэ; 128: global.GLOBAL = глобал;

Дээрх кодонд "энэ" нь дэлхийн контекст юм. commonJS модулийн хувьд (зангилаа ашигладаг) модулийн доторх энэ "объект" (жишээ нь "таны код") нь дэлхийн контекст БИШ. Үүнийг нотлохын тулд "энэ" объектыг, дараа нь аварга том "GLOBAL" объектыг хаана гаргасныг доороос харна уу.

Console.log("\nЭНЭ:"); console.log(энэ); console.log("\nГЛОБАЛ:"); console.log(дэлхий); /* гаралт ... ЭНЭ: {} ГЛОБАЛ: ( ArrayBuffer: , Int8Array: ( BYTES_PER_ELEMENT: 1 ), Uint8Array: ( BYTES_PER_ELEMENT: 1 ), Int16Array: ( BYTES_PER_ELEMENT: 2 ), Uint16Array: ( BYTES_PER_ELEMENT ), Int_2EMENT: (BYTES_PER_ELEMENT: TE_2EMENT : Uint : 2EMENT ), 32Масив: ( _элемент тутамд BYTES_: 4 ), Float32Array: ( BYTES_PER_ELEMENT: 4 ), Float64Array: ( BYTES_PER_ELEMENT: 8 ), DataView: , global: , process: ( EventEmitter: , title: "node", assert: , version: "v0.6.5 all", _tic , moduleLoadList: [ "Binding evaals", "Binding natives", "NativeModule events", "NativeModule buffer", "Binding buffer", "NativeModule assert", "NativeModule util", "NativeModule path", "NativeModule module", " NativeModule fs, "Binding fs", "Binding тогтмолууд", "NativeModule урсгал", "NativeModule консол", "Binding tty_wrap", "NativeModule tty", "NativeModule net", "NativeModule timers", "Binding timer_wrap", " NativeModule _linklist" ], хувилбарууд: ( зангилаа: "0.6.5", v8: "3.6.6.11", ares: "1.7.5-DEV", uv: "0.6", openssl: "0.9.8n" ), nextTick : , stdout: , arch: "x64", stderr: , платформ: "darwin", argv: [ "зангилаа", "/workspace/zd/zgap/darwin-js/index.js" ], stdin: , env: ( TERM_PROGRAM: "iTerm.app", "COM_GOOGLE_CHROME_FRAMEWORK_SERVICE_PROCESS/USERS/DDOPSON/LIBRARY/APPLICATION_SUPPORT/GOOGLE/CHROME_SOCKET": "/tmp/launch-n-nl-scket", SHBINVO: "/tmp/launch-n-nl-scket":ELL/Socket,/" ш" , TMPDIR: "/var/folders/2h/2hQmtmXlFT4yVGtr5DBpdl9LAiQ/-Tmp-/", Apple_PubSub_Socket_Render: "/tmp/launch-9Ga0PT/Render", ХЭРЭГЛЭГЧ: "ddopson", COMMAND_MODE: "unix:AUX3", SSHOCK/ эхлүүлэх -sD905b/Сонсогчид", __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: "Өгөгдмөл", SHLVL: "1", COLORFGBG: "7;0", НҮҮР : "/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: , гарах: , pid: 10321, онцлогууд: (дибаг: худал, uv: үнэн, ipv6: үнэн, tls_npn: худал, tls_sni: үнэн, tls : үнэн ), kill: , execPath: "/usr/local/bin/node", addListener: , _needTickCallback: , on: , removeListener: , reallyExit: , chdir: , дибаг: , алдаа: , cwd: , watchFile: , umask : , getuid: , unwatchFile: , mixin: , setuid: , setgid: , createChildProcess: , getgid: , өвлөнө: , _kill: , _byteLength: , mainModule: ( id: ". ", экспорт: (), эцэг эх: null, файлын нэр: "/workspace/zd/zgap/darwin-js/index.js", ачаалагдсан: худал, гарсан: худал, хүүхдүүд: , замууд: ), _debugProcess: , dlopen: , ажиллах хугацаа: , санах ойн ашиглалт: , uvCounters: , холбох: ), GLOBAL: , root: , Буфер: ( poolSize: 8192, isBuffer: , byteLength: , _charsWritten: 8 ), setTimeout: , setIntervalout: , clearTime, консол: , цонх: , хөтөч: () ) */

**Тэмдэглэл: "GLOBAL._" тохиргооны тухайд ерөнхийдөө var _ = require("доогуур зураас"); Тийм ээ, та Java-д com.foo.bar-г импортлодог шиг доогуур зураас ашигладаг файл бүрт үүнийг хийдэг; Энэ нь файлуудын хоорондох холбоосууд нь "тодорхой" байдаг тул таны код юу хийж байгааг тодорхойлоход хялбар болгодог. Бага зэрэг ядаргаатай, гэхдээ сайн. Энэ бол номлол юм.

Дүрэм болгонд үл хамаарах зүйл байдаг. Надад "GLOBAL._"-г тохируулах шаардлагатай яг нэг тохиолдол байсан. Би "тохируулгын" файлуудыг тодорхойлох системийг бий болгож байсан бөгөөд тэдгээр нь ихэвчлэн JSON боловч уян хатан байдлыг нэмэгдүүлэхийн тулд "JS дээр бичигдсэн" байв. Ийм тохиргооны файлуудад "шаардлагатай" хэллэг байхгүй байсан ч би тэдгээрийг доогуур зураасанд хандахыг хүссэн (БҮХэл систем нь доогуур зураас болон доогуур зураасын загвар дээр суурилдаг байсан) тул би "тохиргоо"-г үнэлэхээсээ өмнө "GLOBAL._" гэж тохируулсан. Тийм ээ, дүрэм болгонд хаа нэгтээ үл хамаарах зүйл байдаг. Гэхдээ чамд сайн шалтгаан байгаа болохоос биш "бичиж ядаж байна" гэхээс илүүтэй би гэрээгээ зөрчихийг хүсч байна."

мөн би var-ыг үлдээж хувьсагчдыг глобал хүрээнд тохируулж болно гэж хэлсэн.

Энэ надад тохирохгүй байна.

Require("доогуур зураас");

Шаардлагатай файлуудад _-г ашиглах боломжгүй. Би app.set суулгаад өөр газар ашиглаж болно.

Энэ нь ажиллах ёстой гэдгийг хэн нэгэн баталж чадах уу? Баярлалаа.

Зангилаа дээр та "global" эсвэл "GLOBAL" объектоор дамжуулан глобал хувьсагчдыг тохируулж болно:

ГЛОБАЛ._ = шаардах("доод зураас"); // гэхдээ та үүнийг "хийх ёсгүй"! (доорх тэмдэглэлийг үзнэ үү)

эсвэл илүү ашигтай ...

GLOBAL.window = ГЛОБАЛ; // хөтөч дээрх шиг

Зангилааны эх сурвалжаас та тэдгээр нь бие биенийхээ нэрс болохыг харж болно:

Node-v0.6.6/src/node.js:28:global = энэ; 128: global.GLOBAL = глобал;

Дээрх кодонд "энэ" нь дэлхийн контекстийг ашигладаг. CommonJS модульчлагдсан системд (зангилаа ашигладаг) модулийн доторх "энэ" объект (өөрөөр хэлбэл "Таны код") нь дэлхийн контекст БИШ. Үүнийг нотлохын тулд би "энэ" объектыг, дараа нь аварга том "ГЛОБАЛ" объектыг хөрвүүлсэн хэсгийг доороос үзнэ үү.

Console.log("\nЭНЭ:"); console.log(энэ); console.log("\nГЛОБАЛ:"); console.log(дэлхий); /* гаралт ... ЭНЭ: {} ГЛОБАЛ: ( ArrayBuffer: , Int8Array: ( BYTES_PER_ELEMENT: 1 ), Uint8Array: ( BYTES_PER_ELEMENT: 1 ), Int16Array: ( BYTES_PER_ELEMENT: 2 ), Uint16Array: ( BYTES_PER_ELEMENT ), Int_2EMENT: (BYTES_PER_ELEMENT: TE_2EMENT : Uint : 2EMENT ), 32Масив: ( _элемент тутамд BYTES_: 4 ), Float32Array: ( BYTES_PER_ELEMENT: 4 ), Float64Array: ( BYTES_PER_ELEMENT: 8 ), DataView: , global: , process: ( EventEmitter: , title: "node", assert: , version: "v0.6.5 all", _tic , moduleLoadList: [ "Binding evaals", "Binding natives", "NativeModule events", "NativeModule buffer", "Binding buffer", "NativeModule assert", "NativeModule util", "NativeModule path", "NativeModule module", " NativeModule fs, "Binding fs", "Binding тогтмолууд", "NativeModule урсгал", "NativeModule консол", "Binding tty_wrap", "NativeModule tty", "NativeModule net", "NativeModule timers", "Binding timer_wrap", " NativeModule _linklist" ], хувилбарууд: ( зангилаа: "0.6.5", v8: "3.6.6.11", ares: "1.7.5-DEV", uv: "0.6", openssl: "0.9.8n" ), nextTick : , stdout: , arch: "x64", stderr: , платформ: "darwin", argv: [ "зангилаа", "/workspace/zd/zgap/darwin-js/index.js" ], stdin: , env: ( TERM_PROGRAM: "iTerm.app", "COM_GOOGLE_CHROME_FRAMEWORK_SERVICE_PROCESS/USERS/DDOPSON/LIBRARY/APPLICATION_SUPPORT/GOOGLE/CHROME_SOCKET": "/tmp/launch-n-nl-scket", SHBINVO: "/tmp/launch-n-nl-scket":ELL/Socket,/" ш" , TMPDIR: "/var/folders/2h/2hQmtmXlFT4yVGtr5DBpdl9LAiQ/-Tmp-/", Apple_PubSub_Socket_Render: "/tmp/launch-9Ga0PT/Render", ХЭРЭГЛЭГЧ: "ddopson", COMMAND_MODE: "unix:AUX3", SSHOCK/ эхлүүлэх -sD905b/Сонсогчид", __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: "Өгөгдмөл", SHLVL: "1", COLORFGBG: "7;0", НҮҮР : "/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: , гарах: , pid: 10321, онцлогууд: (дибаг: худал, uv: үнэн, ipv6: үнэн, tls_npn: худал, tls_sni: үнэн, tls : үнэн ), kill: , execPath: "/usr/local/bin/node", addListener: , _needTickCallback: , on: , removeListener: , reallyExit: , chdir: , дибаг: , алдаа: , cwd: , watchFile: , umask : , getuid: , unwatchFile: , mixin: , setuid: , setgid: , createChildProcess: , getgid: , өвлөнө: , _kill: , _byteLength: , mainModule: ( id: ". ", экспорт: (), эцэг эх: null, файлын нэр: "/workspace/zd/zgap/darwin-js/index.js", ачаалагдсан: худал, гарсан: худал, хүүхдүүд: , замууд: ), _debugProcess: , dlopen: , ажиллах хугацаа: , санах ойн ашиглалт: , uvCounters: , холбох: ), GLOBAL: , root: , Буфер: ( poolSize: 8192, isBuffer: , byteLength: , _charsWritten: 8 ), setTimeout: , setIntervalout: , clearTime, консол: , цонх: , хөтөч: () ) */

**Тэмдэглэл: "GLOBAL._" тохиргооны хувьд ерөнхийдөө var _ = require("доогуур зураас"); . Тийм ээ, та Java дээр com.foo.bar импорт хийдэг шиг доогуур зураас ашигладаг файл бүрт үүнийг хийдэг; . Энэ нь файлуудын хоорондох холбоосууд нь "тодорхой" байдаг тул таны код юу хийж байгааг тодорхойлоход хялбар болгодог. Бага зэрэг ядаргаатай, гэхдээ сайн..... Энэ бол номлол юм.

Дүрэм болгонд үл хамаарах зүйл байдаг. Надад "GLOBAL._"-г тохируулах шаардлагатай яг нэг тохиолдол байсан. Би "тохируулгын" файлуудыг тодорхойлох системийг бий болгож байсан бөгөөд тэдгээр нь ихэвчлэн JSON боловч уян хатан байдлыг нэмэгдүүлэхийн тулд "JS дээр бичигдсэн" байв. Ийм тохиргооны файлуудад "шаардлагатай" хэллэг байхгүй байсан ч би тэдгээрийг доогуур зураасанд хандахыг хүссэн (БҮХэл систем нь доогуур зураас болон доогуур зураасын загвар дээр суурилдаг байсан) тул би "тохиргоо"-г үнэлэхээсээ өмнө "GLOBAL._" гэж тохируулсан. Тийм ээ, дүрэм болгонд хаа нэгтээ үл хамаарах зүйл байдаг. Гэхдээ чамд "шаардлага" гэж бичихээс залхсан тул гэрээг зөрчихийг хүсч байна" гэхээс илүү сайн шалтгаан байгаа.