Node js qlobal dəyişənləri. Nodejs əsasları. Modulun təşkili: modulların nodejs-də tapılma sırası




Bir qovşaqda siz qlobal dəyişənləri "qlobal" və ya "QLOBAL" obyekt vasitəsilə təyin edə bilərsiniz:

QLOBAL._ = tələb ("alt xətt"); // lakin siz bunu etməməlisiniz! (aşağıdakı qeydə baxın)

ya da daha faydalı...

GLOBAL.window = QLOBAL; // brauzerdəki kimi

Düyün mənbəyindən onların bir-birinə ləqəb olduğunu görə bilərsiniz:

Node-v0.6.6/src/node.js:28:qlobal = bu; 128: qlobal.QLOBAL = qlobal;

Yuxarıdakı kodda "bu" qlobal kontekstdir. CommonJS modulu ilə (hansı node istifadə edir), modulun daxilindəki bu "obyekt" (yəni "sizin kodunuz") qlobal kontekst DEYİL. Bunun sübutu üçün aşağıda "bu" obyekti, sonra isə nəhəng "QLOBAL" obyekti hara püskürtdüyümə baxın.

Console.log("\nBU:"); console.log(bu); console.log("\nQLOBAL:"); console.log(qlobal); /* çıxışlar... BU: {} QLOBAL: ( ArrayBuffer: , Int8Array: ( BYTES_PER_ELEMENT: 1 ), Uint8Array: ( BYTES_PER_ELEMENT: 1 ), Int16Array: ( BYTES_PER_ELEMENT: 2 ), Uint16Array: ( BYTES_PER_ELEMENT: BYTES_PER_ELEMENT: Uint8Array: (BYTES_PER_ELEMENT: _TE_2EMENT) 32 Massiv: ( BYTES_HER _ELEMENT: 4 ), Float32Array: ( BYTES_PER_ELEMENT: 4 ), Float64Array: ( BYTES_PER_ELEMENT: 8 ), DataView: , qlobal: , proses: ( EventEmitter: , başlıq: "node", təsdiq: , versiya: "v0.6.5", _tick , moduleLoadList: [ "Binding qiymətləndirilməsi", "Doğma elementlərin bağlanması", "NativeModule hadisələri", "NativeModule buferi", "Binding bufer", "NativeModule assert", "NativeModule util", "NativeModule yolu", "NativeModule modulu", " NativeModule fs", "Binding fs", "Binding sabitləri", "NativeModule axını", "NativeModule konsolu", "Binding tty_wrap", "NativeModule tty", "NativeModule net", "NativeModule timers", "Binding timer_wrap", " NativeModule _linklist" ], versiyalar: ( node: "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: , platforma: "darwin", argv: [ "node", "/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-nScket,:term"/ermba",/"Socket/" sh" , TMPDIR: "/var/folders/2h/2hQmtmXlFT4yVGtr5DBpdl9LAiQ/-Tmp-/", Apple_PubSub_Socket_Render: "/tmp/launch-9Ga0PT/Render", İSTİFADƏÇİ: "ddopson", COMMAND_MODE: "unix:AUTH3", SSHOCK/ işə salın -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: "Defolt", 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: , exit: , pid: 10321, xüsusiyyətlər: ( debug: false, uv: true, ipv6: true, tls_npn: false, tls_sni: true, tls : true ), kill: , execPath: "/usr/local/bin/node", addListener: , _needTickCallback: , on: , removeListener: , reallyExit: , chdir: , debug: , xəta: , cwd: , watchFile: , umask : , getuid: , unwatchFile: , mixin: , setuid: , setgid: , createChildProcess: , getgid: , miras alır: , _kill: , _byteLength: , mainModule: ( id: ". ", ixrac: (), ana: null, fayl adı: "/workspace/zd/zgap/darwin-js/index.js", yükləndi: false, çıxıldı: false, uşaq: , yollar: ), _debugProcess: , dlopen: , iş vaxtı: , yaddaş İstifadəsi: , uvCounters: , bağlama: ), QLOBAL: , kök: , Bufer: ( poolSize: 8192, isBuffer: , byteLength: , _charsWritten: 8 ), setTimeout: , setIntervalout: , clearTime, konsol: , pəncərə: , naviqator: () ) */

**Qeyd: "QLOBAL._" parametrinə gəldikdə, ümumiyyətlə, sadəcə olaraq var _ = require("alt xətt"); . Bəli, bunu alt xəttdən istifadə edən hər bir faylda edirsiniz, Java-da com.foo.bar-ı import etdiyiniz kimi; . Bu, kodunuzun nə etdiyini müəyyən etməyi asanlaşdırır, çünki fayllar arasındakı əlaqələr "açıq-aşkar"dır. Yüngül əsəbi, lakin yaxşıdır. .... Bu bir xütbədir.

Hər qayda üçün bir istisna var. Mən "QLOBAL._" təyin etməli olduğum dəqiq bir nümunəm var idi. Mən əsasən JSON olan, lakin bir az daha çeviklik əlavə etmək üçün “JS-də yazılmış” “konfiqurasiya” fayllarını müəyyən etmək üçün sistem yaradırdım. Bu cür konfiqurasiya fayllarında heç bir "tələb" ifadələri yox idi, lakin mən onların alt xəttə çıxışının olmasını istədim (BÜTÜN sistem alt xətt və alt xətt nümunələrinə əsaslanırdı), ona görə də "konfiqurasiya"nı qiymətləndirməzdən əvvəl "GLOBAL._" təyin edərdim. Beləliklə, bəli, hər bir qayda üçün bir istisna var. Ancaq yaxşı səbəbiniz var, sadəcə olaraq "Mən "tələb edirəm" yazmaqdan yoruldum, ona görə də konvensiyanı pozmaq istəyirəm" deyil.

NODE.JS– js icra etmək üçün proqram aləti.

Nodejs = V8 + I/O + kitabxanaları

V8: sürətli, müasir, qənaətcil

Üstünlüklər

  • Javascript
  • Müştəri və serverdə ümumi kod
  • Əsas veb tapşırıqları
  • Eyni zamanda bir çox əlaqə və tapşırıq
  • İşləyən prototip yaratmaq asandır
  • Rahat npm paket meneceri
  • İcma

Quraşdırma

Quraşdırarkən nodejs özünü PATH dəyişəninə (+ npm) yazır, [idarəetmə - mühit dəyişənləri]; əmr satırında yoxlanıla bilər:
PATH təyin edin

Bir qayda olaraq, fayllar nodejs altında işə salınır: sadə bir skript yazaq və onu komanda xətti ilə işə salaq:


Skript yerinə yetiriləcək və nəticə komanda xəttində göstəriləcək.

Nodejs sənədləri

nodejs modulları

Daxili nodejs modullarının necə işlədiyini başa düşmək üçün mənbə kodu arxivini nodejs saytından yükləməlisiniz (mənbə kodu). Və lib qovluğuna gedin. (dir əmri - əmr xətti vasitəsilə faylların siyahısını əldə edin; bütün alt qovluqlarda faylları siyahıya salmaq lazımdırsa, o zaman "dir" əvəzinə "dir / s" istifadə edin). Əgər paketdən nodejs quraşdırmısınızsa, lib qovluğunda heç bir fayl tapa bilməyəcəksiniz.

Nodejs müxtəlif dərəcəli modullara malikdir sabitlik. (məsələn, 0 – istifadə edilməməlidir; 1, 2 – istifadə edilə bilər, lakin API modulu dəyişə bilər).

Funksiyalar artır (layihə inkişaf edir) və zaman keçdikcə USER konstruktor funksiyasını ayrıca fayla köçürməli olacağıq. Burada modullar işə düşür.

Modullar nodejs-in layihə təşkil etmək üçün təklif etdiyi bir növ yoldur.

Layihələr böyüməyə meyllidir, bu da layihəni bir neçə fayla bölmək istəyinə səbəb olur - modullar burada işə düşür.

tələb edir

HTML səhifələri üçün skriptləri daxil etmək üçün skript teqlərindən istifadə olunur. Nodejs-in xüsusi tələb əmri var.

Var user = tələb ("./user");

Bizim nümunəmizdə biz eyni kataloqdakı fayla (user.js) daxil oluruq (uzatma (.js) isteğe bağlıdır).

//tələb ("./istifadəçi"); // .js müəyyən etmək lazım deyil // bu halda fayl icra olunacaq, lakin heç bir USER dəyişəni olmayacaq // nodejs-dən skript teqlərindən əsas fərq budur // node.js-də funksiyalar və dəyişənlər hər modul qlobaldır // bu fayl üçün (modulun özü) və onlar avtomatik olaraq // qoşulduqda əlçatan olmur (require("./user")) // Bəs girişi necə əldə etmək olar? // Hər modulun xüsusi ixrac dəyişənləri var - bu bir obyektdir və // Mən oraya qoyduğum şey nəticədə qayıdacaq tələb var user = require("./user.js"); // nəticə: istifadəçi = ( İstifadəçi: funksiya )

Nodejs modul sistemi ilə brauzer skriptləri arasındakı ilk fərq: əgər brauzerdə iki skript teqi varsa, o zaman onlardan birində qlobal səviyyədə müəyyən edilmiş funksiya digərində mövcuddur, lakin nodejs-də deyil. Nodej-lərdə funksiyalar və dəyişənlər verilmiş fayl üçün qlobaldır (tələb olunduqda onlar mövcud deyil). Beləliklə, nodejs həqiqətən müstəqil modullar yazmağa imkan verir. Lakin modulun mövcud olması üçün ondan istifadə olunur ixrac sistemi. Hər modulun xüsusi ixrac dəyişəni var.

Modul-kataloq DIR/indeks

Qovluğu birbaşa bağlayırıq var user = require("./user"); müvafiq index.js ehtiva edən .

Misal üçün

Function User(name)( this.name = name; ) User.prototype.hello = function(kim)( console.log(phrases.Hello + ", " + who.name); ); ixrac edir.User = İstifadəçi;

Biz ./server.js faylında İstifadəçi konstruktorunu birləşdirib istifadə edirik

//server.js var user = require("./user"); var vasya = yeni istifadəçi.User("Vasya");

"./" - cari qovluğa nisbətən

ixrac obyektdir və ora qoyulan tələb (exports.jpg) nəticəsində geri qaytarılacaqdır. Bu yolla modul öz şəxsi dəyişənlərini/funksiyalarını elan edə və yalnız lazım olanı ixrac edə bilər.


Qlobal dəyişənlər üçün və s. qlobal obyekt var

Qlobal.User = İstifadəçi;

Alt xətt

  • Bağlantı tələb olunur
  • Dəyişənlər: var (modullar üçün özəl), ixrac, qlobal (nadir hallarda istifadə olunur)
  • Modulların növləri: js, node (.node uzadılması ilə), json (.json genişləndirilməsi ilə). Json modulları faylda bəzi sadə məlumatları saxlamaq lazım olduqda istifadə olunur.
  • Modul-kataloq DIR/indeks

modul obyekti

  • modul obyekti
  • Modul-funksiya module.exports = funksiya
  • Keşləmə modulları (modul bir daha oxunmur)
  • Modulun təşkili: axtarış qaydası
  • Keçid parametrləri: modul-zavod

Modul obyekti (modullar üçün əsas obyekt) hər bir modulda mövcud olan dəyişəndir (fayl, siz console.log(module;); çıxara bilərsiniz). . Məzmun: id xüsusiyyəti – adətən fayla gedən yol,
valideyn – ana modula keçid (module.parent – ​​bunu tələb edən ana modula keçid),
uşaqlar (modul.children - tələb vasitəsilə qoşulan modullar),
əmlak və s. ixrac edir.

Modul yoxsa proqram? modul.valideyn

Modul birbaşa işə salına bilər, lakin əgər deyilsə, funksionallıq başqa modula qoşulubsa, bu funksiyanı ixrac etsin. Bu iki halı yoxlamaqla ayırmaq olar:

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


ps: stackoverflow.com saytında deyildiyi kimi, valideyn şərh üçün skripti çağıran moduldur

// $ node foo.js console.log(module.parent); // null // tələb ("./foo") console.log(module.parent); // ( ... )

modul.exports-dan düzgün istifadə

Modul kontekstində:

module.exports = ixrac = bu (bu konstruksiyalar ekvivalentdir)

Əgər funksiyanı obyektdə deyil, birbaşa ötürmək istəyirsinizsə, aşağıdakı sintaksisi istifadə edin:

Module.exports = İstifadəçi;


Modul Keşləmə

Nodejs modulu yüklədikdə, o, müvafiq modul obyektini tamamilə yaradır (ana , ixrac və digər oxşar xassələri nəzərə alaraq) və onu özündə yadda saxlayır (module.id (faylın tam yolu) daxili keş üçün identifikator kimi xidmət edir. ) və növbəti dəfə hər hansı modula (fayl) daxil olduğumuz (qoşulduğumuz) zaman nodejs eyni obyekti keşdən götürür. Yəni, məsələn, modulu faylda bir dəfə işə salmaq kifayətdir, gələcəkdə ondan sadəcə istifadə edə bilərsiniz.

Bizim vəziyyətimizdə var db üçün = require("../db");
və var db üçün = require("./db"); eyni obyekt alınır. Buna görə də prinsip belədir: modul ilk dəfə istifadə edildikdə, o, işə salınır və gələcəkdə biz yalnız onu birləşdirib istifadə edirik (yəni bizim vəziyyətimizdə db.connect()-dən iki dəfə istifadə etməyə ehtiyac yoxdur, yəni müxtəlif fayllarda).


Modulun təşkili: modulların nodejs-də tapılma sırası

Db-nin həmişə müəyyən bir yol göstərmədən qoşulmasını necə etmək olar:

Var db = tələb ("../db"); //və ya var db = tələb ("./db");

və bu kimi:

Var db = tələb ("db");

db-nin hansı fayla qoşulmasından asılı olmayaraq.

Bunu etmək üçün nodejs-də modulların axtarış qaydasını başa düşməlisiniz (tələb çağırıldıqda nə baş verir). Nodej-lərdə çoxlu daxili modullar var, məsələn, require("fs"); , problemsiz bağlanacaq. Əgər tələbdə xüsusi bir yol göstərsəniz, məsələn, require("../db"); , sonra axtarış verilmiş yola əsaslanacaq və fayl tapılacaq və ya nodejs bu faylı kataloq kimi əldə etməyə çalışacaq (və kateqoriya daxilində index.js axtaracaq).

Əgər tələb edirsinizsə("db"); və modul quraşdırılmayıb, onda node_modules kataloqu cari mövqeyə nisbətən axtarılacaq (əgər tapılsa, modulu ondan götürməyə çalışacaq). node_modules kataloqu yoxdursa, node_modules kataloqu yuxarıda axtarılacaq və s.

Modul üçün xüsusi yolu təyin etməklə yanaşı, nodejs bu kimi modulları axtara bilər:

npm-ə giriş - Node.JS üçün paket meneceri

  1. modul haqqında məlumatı (ad, versiya və s.) ehtiva edən paket təsviri faylını (package.json) yaradın. İstər əl ilə, istərsə də əmrlə
    npm init
    (lazımi məlumatları tələb edəcək)
  2. Modulu dərc etmək üçün sizə lazımdır:
    1. Npm adduser əmrindən istifadə edərək istifadəçi əlavə edin (istifadəçi adı və parol daxil etməlisiniz). İndi npm ilə bütün işlər bu istifadəçinin adından ediləcək. İstifadəçi https://www.npmjs.com/~name_user saytına daxil olub modullarına nəzarət edə bilər.
    2. Nəşriyyat: npm publish
  3. Sonra kimsə verilənlər bazasına əlavə edilmiş modulunuzdan istifadə edə bilər və istifadəçi özü də dəyişikliklər edə bilər.
  4. Npm help əmrindən istifadə edərək bütün npm əmrlərini əldə edin
  5. Verilənlər bazasında modul axtarın: npm s açar sözləri və ya npm axtarış açar sözləri (məsələn, npm s super modulu)
  6. Modulu quraşdırın: npm install name_module və ya npm i name_module
  7. Modulları quraşdırarkən, nodejs əvvəlcə cari kataloqda node_modules qovluğunu axtarır (sonra daha yüksək və daha yüksək və s.) və ya (node_modules yoxdursa) package.json (həmçinin yuxarı qalxır; package.json adətən kökünü bildirir) axtarır. layihə) və müvafiq olaraq, paket.json tapsa, müvafiq kataloqda node_modules qovluğunu yaradır; hər iki seçim uğursuz olarsa, nodejs cari kataloqda node_modules qovluğunu yaradır. Əgər siz modulu konkret qovluğa yerləşdirmək istəyirsinizsə, o zaman həmin qovluqda node_modules qovluğu yaratmalısınız.
  8. npm up yeniləmə modulu (node_modules qovluğunda olan yeniləmə modullarını yoxlayacaq)
  9. npm modul adını sil (modulu sil)

npm-dən çıxış:

npm init
nmp əlavə istifadəçisi
npm dərc edir
npm axtarış açar sözləri
npm quraşdırma modulu
npm yeniləmə modulu
npm modulunu çıxarın
npm yardım əmri

NPM Paket Strukturu

Tələb olunan versiyanın quraşdırılması, məsələn: npm i [email protected]

Modul git versiya sistemindən istifadə edilməklə, məsələn, github-da hazırlanarsa, modulun ən son versiyası əldə edilə bilər. Yalnız oxumaq üçün Git (url) əldə etmək kifayətdir: https://github.com/strongloop/express.git və konsolda:

npm və https://github.com/strongloop/express.git

package.json-dakı asılılıqlar

asılılıqlar bunun asılı olduğu modulları göstərir.

devdən asılılıqlar

Modul asılılıq kimi çəkilərsə, devDependencies-də qeydiyyatdan keçmiş modullar quraşdırılmır. Onlar yalnız inkişaf üçün quraşdırılıb və məsələn, node_modules qovluğunda modula keçib npm i daxil etsəniz (və ya npm konfiqurasiya bayrağını təyin etməklə) quraşdırıla bilər.

əsas sahə paketə giriş nöqtəsini təyin edir

Qlobal modullar

-g bayrağını təyin etsəniz, istənilən modul qlobal olaraq quraşdırıla bilər: npm -g modulu

Sistem kataloqu üçün qlobal vasitələr.

Windows üçün qlobal modulların kataloqu:

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

Qlobal modullar standart sistem kataloqunda yerləşdirilir. Package.json-da olan binarlar sistem yolunda quraşdırılacaq (bu, qlobal modulların əsas istifadəsidir), yəni gələcəkdə onları konsol vasitəsilə çağırmaq olar.

İ.Kantorun kurslarının materialları əsasında

Node-də siz "qlobal" və ya "GLOBAL" obyekti vasitəsilə qlobal dəyişənləri təyin edə bilərsiniz:

QLOBAL._ = tələb ("alt xətt"); // lakin siz bunu etməməlisiniz! (aşağıdakı qeydə baxın)

ya da daha faydalı...

GLOBAL.window = QLOBAL; // brauzerdəki kimi

Düyün mənbəyindən onların bir-birinə ləqəb olduğunu görə bilərsiniz:

Node-v0.6.6/src/node.js:28:qlobal = bu; 128: qlobal.QLOBAL = qlobal;

Yuxarıdakı kodda "bu" qlobal kontekstdən istifadə edir. CommonJS modul sistemində (hansı node istifadə edir), modulun içindəki "bu" obyekt (yəni "Sizin kodunuz") qlobal kontekst DEYİL. Bunun sübutu üçün aşağıda "bu" obyekti və sonra nəhəng "QLOBAL" obyekti çevirdiyimə baxın.

Console.log("\nBU:"); console.log(bu); console.log("\nQLOBAL:"); console.log(qlobal); /* çıxışlar... BU: {} QLOBAL: ( ArrayBuffer: , Int8Array: ( BYTES_PER_ELEMENT: 1 ), Uint8Array: ( BYTES_PER_ELEMENT: 1 ), Int16Array: ( BYTES_PER_ELEMENT: 2 ), Uint16Array: ( BYTES_PER_ELEMENT: BYTES_PER_ELEMENT: Uint8Array: (BYTES_PER_ELEMENT: _TE_2EMENT) 32 Massiv: ( BYTES_HER _ELEMENT: 4 ), Float32Array: ( BYTES_PER_ELEMENT: 4 ), Float64Array: ( BYTES_PER_ELEMENT: 8 ), DataView: , qlobal: , proses: ( EventEmitter: , başlıq: "node", təsdiq: , versiya: "v0.6.5", _tick , moduleLoadList: [ "Binding qiymətləndirilməsi", "Doğma elementlərin bağlanması", "NativeModule hadisələri", "NativeModule buferi", "Binding bufer", "NativeModule assert", "NativeModule util", "NativeModule yolu", "NativeModule modulu", " NativeModule fs", "Binding fs", "Binding sabitləri", "NativeModule axını", "NativeModule konsolu", "Binding tty_wrap", "NativeModule tty", "NativeModule net", "NativeModule timers", "Binding timer_wrap", " NativeModule _linklist" ], versiyalar: ( node: "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: , platforma: "darwin", argv: [ "node", "/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-nScket,:term"/ermba",/"Socket/" sh" , TMPDIR: "/var/folders/2h/2hQmtmXlFT4yVGtr5DBpdl9LAiQ/-Tmp-/", Apple_PubSub_Socket_Render: "/tmp/launch-9Ga0PT/Render", İSTİFADƏÇİ: "ddopson", COMMAND_MODE: "unix:AUTH3", SSHOCK/ işə salın -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: "Defolt", 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: , exit: , pid: 10321, xüsusiyyətlər: ( debug: false, uv: true, ipv6: true, tls_npn: false, tls_sni: true, tls : true ), kill: , execPath: "/usr/local/bin/node", addListener: , _needTickCallback: , on: , removeListener: , reallyExit: , chdir: , debug: , xəta: , cwd: , watchFile: , umask : , getuid: , unwatchFile: , mixin: , setuid: , setgid: , createChildProcess: , getgid: , miras alır: , _kill: , _byteLength: , mainModule: ( id: ". ", ixrac: (), ana: null, fayl adı: "/workspace/zd/zgap/darwin-js/index.js", yükləndi: false, çıxıldı: false, uşaq: , yollar: ), _debugProcess: , dlopen: , iş vaxtı: , yaddaş İstifadəsi: , uvCounters: , bağlama: ), QLOBAL: , kök: , Bufer: ( poolSize: 8192, isBuffer: , byteLength: , _charsWritten: 8 ), setTimeout: , setIntervalout: , clearTime, konsol: , pəncərə: , naviqator: () ) */

**Qeyd: "QLOBAL._" parametrinə gəldikdə, siz sadəcə olaraq var _ = require("alt xətt"); . Bəli, bunu alt xəttdən istifadə edən hər bir faylda edirsiniz, Java-da com.foo.bar-ı import etdiyiniz kimi; . Bu, kodunuzun nə etdiyini müəyyən etməyi asanlaşdırır, çünki fayllar arasındakı əlaqələr "açıq-aşkar"dır. Yüngül zəhlətökən, amma yaxşıdır..... Bu təbliğatdır.

Hər qayda üçün bir istisna var. "GLOBAL._" təyin etməli olduğum dəqiq bir nümunəm var idi. Mən əsasən JSON olan, lakin bir az daha çeviklik əlavə etmək üçün “JS-də yazılmış” “konfiqurasiya” fayllarını müəyyən etmək üçün sistem yaradırdım. Bu cür konfiqurasiya fayllarında heç bir "tələb" ifadələri yox idi, lakin mən onların alt xəttə çıxışının olmasını istədim (BÜTÜN sistem alt xətt və alt xətt nümunələrinə əsaslanırdı), ona görə də "konfiqurasiya"nı qiymətləndirməzdən əvvəl "GLOBAL._" təyin edərdim. Beləliklə, bəli, hər bir qayda üçün bir istisna var. Ancaq yaxşı bir səbəbiniz var, sadəcə "Mən "tələb" yazmaqdan yoruldum, buna görə müqaviləni pozmaq istəyirəm" deyil.

Hamıya salam! Bu yazıda platformanı anlamağa davam edəcəyik NodeJS və haqqında danışın qlobal obyekt.

Bu konsepsiya ilə artıq tanış olmalısınız. Biz yazanda javascript brauzerdə kodu, sonra qlobal obyektdən istifadə edirik pəncərə. IN NodeJS qlobal obyekt də var və o, sadə adlanır Qlobal.

Eləcə də pəncərə, Qlobal kodun istənilən yerindən bəzi daxili xassələrdən və metodlardan istifadə etməyə imkan verir. Nümunələrə baxaq.

Yəqin ki, ən məşhur üsullardan biri, yeri gəlmişkən, qlobal brauzer obyektində də mövcuddur pəncərə- Bu console.log(). Bunu belə yaza bilərsiniz:

Və kod mötərizədə mətni konsolunuzda göstərəcək.

Müəyyən bir müddətdən sonra bəzi hərəkətləri yerinə yetirməyə imkan verən başqa bir məşhur üsul:

// Kodu 7 saniyəyə yerinə yetirin (7000 millisaniyə)
setTimeout (funksiya () (
console.log("Salam, dünya!");
}, 7000);

Düşünürəm ki, əgər varsa, bunu təxmin etmək çətin deyil setTimeout(), onda olmalıdır setInterval().

// Hər saniyə "Salam, dünya" göstərəcək
setInterval(funksiya()(
console.log("Salam, dünya!");
}, 1000);

NodeJS sistemdən bəzi faydalı məlumatları almağa imkan verir. Məsələn, siz qlobal obyekt xassəsindən istifadə edərək hazırda olduğunuz qovluğa tam yolu tapa bilərsiniz __dirname.

Console.log(__dirname);

Əgər kodun icra olunduğu faylın adını da almaq istəyirsinizsə, aşağıdakıları yaza bilərsiniz.

Bir qovşaqda siz qlobal dəyişənləri "qlobal" və ya "QLOBAL" obyekt vasitəsilə təyin edə bilərsiniz:

QLOBAL._ = tələb ("alt xətt"); // lakin siz bunu etməməlisiniz! (aşağıdakı qeydə baxın)

ya da daha faydalı...

GLOBAL.window = QLOBAL; // brauzerdəki kimi

Düyün mənbəyindən onların bir-birinə ləqəb olduğunu görə bilərsiniz:

Node-v0.6.6/src/node.js:28:qlobal = bu; 128: qlobal.QLOBAL = qlobal;

Yuxarıdakı kodda "bu" qlobal kontekstdir. CommonJS modulu ilə (hansı node istifadə edir), modulun daxilindəki bu "obyekt" (yəni "sizin kodunuz") qlobal kontekst DEYİL. Bunun sübutu üçün aşağıda "bu" obyekti, sonra isə nəhəng "QLOBAL" obyekti hara püskürtdüyümə baxın.

Console.log("\nBU:"); console.log(bu); console.log("\nQLOBAL:"); console.log(qlobal); /* çıxışlar... BU: {} QLOBAL: ( ArrayBuffer: , Int8Array: ( BYTES_PER_ELEMENT: 1 ), Uint8Array: ( BYTES_PER_ELEMENT: 1 ), Int16Array: ( BYTES_PER_ELEMENT: 2 ), Uint16Array: ( BYTES_PER_ELEMENT: BYTES_PER_ELEMENT: Uint8Array: (BYTES_PER_ELEMENT: _TE_2EMENT) 32 Massiv: ( BYTES_HER _ELEMENT: 4 ), Float32Array: ( BYTES_PER_ELEMENT: 4 ), Float64Array: ( BYTES_PER_ELEMENT: 8 ), DataView: , qlobal: , proses: ( EventEmitter: , başlıq: "node", təsdiq: , versiya: "v0.6.5", _tick , moduleLoadList: [ "Binding qiymətləndirilməsi", "Doğma elementlərin bağlanması", "NativeModule hadisələri", "NativeModule buferi", "Binding bufer", "NativeModule assert", "NativeModule util", "NativeModule yolu", "NativeModule modulu", " NativeModule fs", "Binding fs", "Binding sabitləri", "NativeModule axını", "NativeModule konsolu", "Binding tty_wrap", "NativeModule tty", "NativeModule net", "NativeModule timers", "Binding timer_wrap", " NativeModule _linklist" ], versiyalar: ( node: "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: , platforma: "darwin", argv: [ "node", "/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-nScket,:term"/ermba",/"Socket/" sh" , TMPDIR: "/var/folders/2h/2hQmtmXlFT4yVGtr5DBpdl9LAiQ/-Tmp-/", Apple_PubSub_Socket_Render: "/tmp/launch-9Ga0PT/Render", İSTİFADƏÇİ: "ddopson", COMMAND_MODE: "unix:AUTH3", SSHOCK/ işə salın -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: "Defolt", 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: , exit: , pid: 10321, xüsusiyyətlər: ( debug: false, uv: true, ipv6: true, tls_npn: false, tls_sni: true, tls : true ), kill: , execPath: "/usr/local/bin/node", addListener: , _needTickCallback: , on: , removeListener: , reallyExit: , chdir: , debug: , xəta: , cwd: , watchFile: , umask : , getuid: , unwatchFile: , mixin: , setuid: , setgid: , createChildProcess: , getgid: , miras alır: , _kill: , _byteLength: , mainModule: ( id: ". ", ixrac: (), ana: null, fayl adı: "/workspace/zd/zgap/darwin-js/index.js", yükləndi: false, çıxıldı: false, uşaq: , yollar: ), _debugProcess: , dlopen: , iş vaxtı: , yaddaş İstifadəsi: , uvCounters: , bağlama: ), QLOBAL: , kök: , Bufer: ( poolSize: 8192, isBuffer: , byteLength: , _charsWritten: 8 ), setTimeout: , setIntervalout: , clearTime, konsol: , pəncərə: , naviqator: () ) */

**Qeyd: "QLOBAL._" parametrinə gəldikdə, ümumiyyətlə, sadəcə olaraq var _ = require("alt xətt"); Bəli, bunu alt xəttdən istifadə edən hər bir faylda edirsiniz, Java-da com.foo.bar-ı idxal etdiyiniz kimi; Bu, kodunuzun nə etdiyini müəyyən etməyi asanlaşdırır, çünki fayllar arasındakı əlaqələr "açıq-aşkar"dır. Yüngül əsəbi, lakin yaxşıdır. Bu xütbədir.

Hər qayda üçün bir istisna var. Mən "QLOBAL._" təyin etməli olduğum dəqiq bir nümunəm var idi. Mən əsasən JSON olan, lakin bir az daha çeviklik əlavə etmək üçün “JS-də yazılmış” “konfiqurasiya” fayllarını müəyyən etmək üçün sistem yaradırdım. Bu cür konfiqurasiya fayllarında heç bir "tələb" ifadələri yox idi, lakin mən onların alt xəttə çıxışının olmasını istədim (BÜTÜN sistem alt xətt və alt xətt nümunələrinə əsaslanırdı), ona görə də "konfiqurasiya"nı qiymətləndirməzdən əvvəl "GLOBAL._" təyin edərdim. Beləliklə, bəli, hər bir qayda üçün bir istisna var. Amma sənin yaxşı səbəbin var, təkcə “yazmaqdan yoruldum” yox, ona görə də razılaşmanı pozmaq istəyirəm”.