經過第一天的學習,對Node.js有了一個初步的認識,今天繼續學習Node.js,加以整理并分享,如有不足之處,還請指正,
require函式
作用:在當前模塊中加載另外一個模塊
語法:require("模塊名稱")
模塊分類
在Node.js中,模塊可以分為三大類,如下所示:
- 自定義模塊:在專案中撰寫的具有特定功能的模塊就是自定義模塊,
- 當子模塊沒有暴露資料時,回傳空物件,而不是undefined,
- 參考自定義模塊,必須在路徑前加./【如:require("./01.js")】,因為Node.js默認不是當前目錄,而是node_modules,
- 第三方模塊:第三方程式員或公司開發的模塊,需要先安裝再使用,可以通過NPM包管理器進行安裝,
- 系統模塊:Node.js自帶的系統模塊,不需要安裝下載,直接參考即可【如:fs,http,url等】,
第三方模塊
如果要使用第三方模塊,必須要先進行安裝,以jQuery為例,如下所示:
1. 安裝第三方模塊
安裝之前,如下所示:

通過安裝命令【npm install jquery】進行安裝,如下所示:

安裝成功后,會自動在程式目錄創建node_modules檔案夾,如下所示:

2. 引入第三方模塊
當安裝成功后,在程式中直接參考即可,如下所示:
1 var jquery = require("jquery"); 2 console.log(jquery.toString());
3. 示例測驗
在命令列進行測驗參考第三方模塊,如下所示:

注意:示例之所以報錯,是因為jQuery是瀏覽器端的模塊庫,所以不支持服務器端呼叫,本次只是作為呼叫示例演示,
系統模塊
系統模塊是Node.js自帶的具有特定功能的模塊,不需要安裝,直接使用即可,以檔案模塊為例,如下所示:
首先創建一個測驗檔案test.txt,檔案內容如下:

然后通過Node.js自帶的fs模塊進行呼叫,如下所示:
1 var fs =require("fs"); 2 fs.readFile("test.txt",function(err,data){ 3 console.log(data.toString()); 4 });
測驗示例如下所示:

require注意事項
- 當引入的模塊存在錯誤時,會報錯;
- 當引入的模塊路徑不存在時,也會報錯;
- 當模塊被重復參考是,只會加載一次【因為第一次加載時,會存入快取區,第二次加載時,會先判斷快取區是否存在,如果存在,則直接賦值】,
關于require加載模塊示意圖,可參考下圖:

exports匯出物件
作用:將模塊中需要共享給其他模塊的資料暴露或匯出到參考處,
語法:exports.屬性或函式,
1. exports示例
如下示例:公開了一個用戶名和sayHi方法到參考處,
1 var username="小六公子"; 2 function sayHi(){ 3 console.log("hi,小六子"); 4 } 5 exports.username=username; 6 exports.sayHi=sayHi;
2. exports注意事項
在使用exports時,注意事項如下:
exports等同于module.exports ,是module.exports的參考,記憶體地址一致;可通過以下方式進行判斷:

exports是一個物件,可以添加屬性和方法,但不可以修改exports指向的內容,如下所示:
1 exports.sayHi=sayHi; 2 exports=sayHi;//此語法是錯誤的,不能修改指向
module模塊物件
在module中最重要的就是exports物件,如下所示:
- module.exports,是真正的暴露物件,exports只是對它的參考,
- module.exports.屬性=值;
- module.exports.方法=函式;
- module.exports=物件或函式;//直接匯出物件
module物件的其他屬性:
- module.id 模塊的ID,即物件的唯一路徑,
- module.parent 模塊的父物件,
- module.filename,模塊的檔案名和路徑,
- module.children 子模塊,是一個陣列型別,
- module.paths 陣列型別,當前模塊查找物件的路徑串列,
關于module物件具體詳細資訊如下所示:

package.json包描述檔案
NPM【Node Package Manager】是基于Node.js的包管理工具,在Node.js專案中,JS的基本單位是單個檔案,但是復雜的模塊往往由多個子模塊組成,為了便于管理和使用,我們可以把由多個模塊組成的大模塊稱為包,并把所有子模塊放在同一個目錄中,組成一個包的所有子模塊中,需要有一個入口,入口模塊的匯出物件被稱為包的匯出物件,默認包中的入口模塊為index.js,也可以在包中新建一個package.json包描述檔案,設定main屬性為模塊的入口,
1. 什么是package.json ?
package.json是node.js專案的包描述檔案,以json格式的形式描述專案,以之前安裝的jQuery為例,可以查看對應的package.json檔案,如下所示:
1 { 2 "_from": "jquery", 3 "_id": "[email protected]", 4 "_inBundle": false, 5 "_integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==", 6 "_location": "/jquery", 7 "_phantomChildren": {}, 8 "_requested": { 9 "type": "tag", 10 "registry": true, 11 "raw": "jquery", 12 "name": "jquery", 13 "escapedName": "jquery", 14 "rawSpec": "", 15 "saveSpec": null, 16 "fetchSpec": "latest" 17 }, 18 "_requiredBy": [ 19 "#USER", 20 "/" 21 ], 22 "_resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", 23 "_shasum": "c72a09f15c1bdce142f49dbf1170bdf8adac2470", 24 "_spec": "jquery", 25 "_where": "D:\\MyProject\\DemoNodeJs", 26 "author": { 27 "name": "OpenJS Foundation and other contributors", 28 "url": "https://github.com/jquery/jquery/blob/3.6.0/AUTHORS.txt" 29 }, 30 "bugs": { 31 "url": "https://github.com/jquery/jquery/issues" 32 }, 33 "bundleDependencies": false, 34 "commitplease": { 35 "nohook": true, 36 "components": [ 37 "Docs", 38 "Tests", 39 "Build", 40 "Support", 41 "Release", 42 "Core", 43 "Ajax", 44 "Attributes", 45 "Callbacks", 46 "CSS", 47 "Data", 48 "Deferred", 49 "Deprecated", 50 "Dimensions", 51 "Effects", 52 "Event", 53 "Manipulation", 54 "Offset", 55 "Queue", 56 "Selector", 57 "Serialize", 58 "Traversing", 59 "Wrap" 60 ], 61 "markerPattern": "^((clos|fix|resolv)(e[sd]|ing))|^(refs?)", 62 "ticketPattern": "^((Closes|Fixes) ([a-zA-Z]{2,}-)[0-9]+)|^(Refs? [^#])" 63 }, 64 "deprecated": false, 65 "description": "JavaScript library for DOM operations", 66 "devDependencies": { 67 "@babel/core": "7.3.3", 68 "@babel/plugin-transform-for-of": "7.2.0", 69 "commitplease": "3.2.0", 70 "core-js": "2.6.5", 71 "eslint-config-jquery": "3.0.0", 72 "grunt": "1.3.0", 73 "grunt-babel": "8.0.0", 74 "grunt-cli": "1.3.2", 75 "grunt-compare-size": "0.4.2", 76 "grunt-contrib-uglify": "3.4.0", 77 "grunt-contrib-watch": "1.1.0", 78 "grunt-eslint": "22.0.0", 79 "grunt-git-authors": "3.2.0", 80 "grunt-jsonlint": "1.1.0", 81 "grunt-karma": "4.0.0", 82 "grunt-newer": "1.3.0", 83 "grunt-npmcopy": "0.2.0", 84 "gzip-js": "0.3.2", 85 "husky": "1.3.1", 86 "insight": "0.10.1", 87 "jsdom": "13.2.0", 88 "karma": "5.2.3", 89 "karma-browserstack-launcher": "1.4.0", 90 "karma-chrome-launcher": "2.2.0", 91 "karma-firefox-launcher": "1.1.0", 92 "karma-ie-launcher": "1.0.0", 93 "karma-jsdom-launcher": "8.0.2", 94 "karma-qunit": "3.0.0", 95 "load-grunt-tasks": "5.1.0", 96 "native-promise-only": "0.8.1", 97 "promises-aplus-tests": "2.1.2", 98 "q": "1.5.1", 99 "qunit": "2.9.2", 100 "raw-body": "2.3.3", 101 "requirejs": "2.3.6", 102 "sinon": "2.3.7", 103 "sizzle": "2.3.6", 104 "strip-json-comments": "2.0.1", 105 "testswarm": "1.1.2", 106 "uglify-js": "3.4.7" 107 }, 108 "homepage": "https://jquery.com", 109 "husky": { 110 "hooks": { 111 "commit-msg": "commitplease .git/COMMIT_EDITMSG", 112 "pre-commit": "grunt lint:newer qunit_fixture" 113 } 114 }, 115 "keywords": [ 116 "jquery", 117 "javascript", 118 "browser", 119 "library" 120 ], 121 "license": "MIT", 122 "main": "dist/jquery.js", 123 "name": "jquery", 124 "repository": { 125 "type": "git", 126 "url": "git+https://github.com/jquery/jquery.git" 127 }, 128 "scripts": { 129 "build": "npm install && grunt", 130 "jenkins": "npm run test:browserless", 131 "start": "grunt watch", 132 "test": "npm run test:slim && npm run test:no-deprecated && npm run test:no-sizzle && grunt && grunt test:slow && grunt karma:main && grunt karma:amd", 133 "test:amd": "grunt && grunt karma:amd", 134 "test:browser": "grunt && grunt karma:main", 135 "test:browserless": "grunt && grunt test:slow", 136 "test:no-deprecated": "grunt test:prepare && grunt custom:-deprecated && grunt karma:main", 137 "test:no-sizzle": "grunt test:prepare && grunt custom:-sizzle && grunt karma:main", 138 "test:slim": "grunt test:prepare && grunt custom:slim && grunt karma:main" 139 }, 140 "title": "jQuery", 141 "version": "3.6.0" 142 }View Code
2. 如何創建package.json檔案?
在node.js中,可以根據向導進行創建,在命令列,切換目錄到程式所在目錄,然后輸入命令【npm init】即可開啟包檔案創建向導,如下所示:

根據向導安裝步驟依次填寫對應資訊,經過以上7步,即可創建包檔案,創建成功后在程式目錄下,如下所示:
1 { 2 "name": "demonode", 3 "version": "1.0.0", 4 "description": "node示例", 5 "main": "index.js", 6 "dependencies": { 7 "jquery": "^3.6.0" 8 }, 9 "devDependencies": {}, 10 "scripts": { 11 "test": "echo \"Error: no test specified\" && exit 1" 12 }, 13 "author": "小六公子", 14 "license": "MIT" 15 }
注意:如果創建默認package.json檔案,可以采用【npm init -y】命令,一鍵生成,
NPM基礎
1. 常用npm命令
常用的npm命令,如下所示:
- 安裝命令:通過安裝包命令【 npm install 包名稱】進行安裝指定的第三方包,
- 縮寫安裝命令:通過命令【npm i 包名稱】安裝指定的第三方包,
- 指定版本安裝:通過命令【npm i 包名稱@verson】安裝指定版本的第三方包,默認安裝最新版本,
- 全域安裝:通過命令【npm i 包名稱 -g】進行全域安裝第三方包,即可應用于所有的專案,默認全域安裝目錄【C:\Users\登錄賬號\AppData\Roaming\npm\node_modules】
- 安裝同時寫入依賴串列:通過命令【npm i 包名稱 --save】在安裝的同時寫入包描述檔案中的依賴串列中,
- 安裝同時寫入開發時依賴串列:通過命令【npm i 包名稱 --save-dev】在安裝的同時寫入包描述檔案中的開發依賴串列中,
- 查找包:通過命令【npm serach 包名稱】進行查找,
- 預覽包:通過命令【npm view 包名稱】進行預覽包的內容,
- 卸載包:通過命令【npm uninstall 包名稱】進行卸載已安裝的包,
- 更新包:通過命令【npm update 包名稱】更新包,
2. npm 示例
以npm的安裝和查找為例,如下所示:

cnpm基礎
1. 什么是cnpm ?
npm命令是需要從國外的服務器進行下載和安裝,速度會比較慢,所有為了滿足國內的應用需要,cnpm應運而生,cnpm是淘寶提供的與npm服務器保持同步更新的軟體包鏡像,
目前cnpm的網址為【https://npmmirror.com/package/cnpm】,關于cnpm簡介,如下所示:

2. 使用cnpm
如果要使用cnpm,可以通過命令進行注冊,如下所示:
1 npm install -g cnpm --registry=https://registry.npmmirror.com

cnpm命令使用和npm一致,加上c前綴即可,示例如下所示:

控制臺輸出
1. 控制臺常見輸出
在Node.js做為服務器端運行時環境,所以控制臺輸出也是比較常見,如下所示:
- 在Node.js中,控制臺輸出有以下幾種:
- console.log(),與瀏覽器中的用法一致,
- console.dir() ,輸出目錄資訊,
- console.error(),錯誤資訊輸出,
- console.time(識別符號) 與console.timeEnd(識別符號)一起使用,可以計算某段程式的執行時間,
- console.assert(條件運算式,輸出內容);當條件運算式為假時,輸出內容,
2. 控制臺輸出示例
控制臺輸出的常用語法示例,如下所示:
1 console.log("我是小六子"); 2 console.dir("我是小六子呀"); 3 console.error("小六子出錯了"); 4 console.time("t1"); 5 for(var i=0;i<99999;i++){ 6 // 7 } 8 console.timeEnd("t1");
示例運行截圖,如下所示:

Node.js作用域
1. 什么是作用域?
作用域:規定了一個變數和函式可以使用的范圍,作用域分為兩種:全域作用域,區域作用域【函式作用域】,在Node.js中,一個檔案就表示一個模塊,模塊中使用var定義的變數為區域變數,只能在模塊中使用,因為模塊在使用時會被Node.js編譯為一個函式,
2. 全域變數
如果將資料共享給其他模塊,可以通過兩種方法:
- exports.屬性或函式 的方式匯出,
- 宣告為全域變數,
全域變數,通過【global.屬性或函式=值】的方式使用,如下所示:
1 var username="小六公子"; 2 function sayHi(){ 3 console.log("hi,小六子"); 4 } 5 global.username=username; 6 global.sayHi=sayHi;
呼叫全部變數,如下所示:
1 var obj =require("./demo01-1.js"); 2 console.log(username); 3 sayHi();
注意:global關鍵字在呼叫時可以省略,使用方式幾乎和exports一致,
備注
江上漁者【作者】范仲淹 【朝代】宋
江上往來人,但愛鱸魚美,
君看一葉舟,出沒風波里,
作者:小六公子
出處:http://www.cnblogs.com/hsiang/
本文著作權歸作者和博客園共有,寫文不易,支持原創,歡迎轉載【點贊】,轉載請保留此段宣告,且在文章頁面明顯位置給出原文連接,謝謝,
關注個人公眾號,定時同步更新技術及職場文章
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/444419.html
標籤:JavaScript
上一篇:Cocos 游戲中 JavaScript 腳本模塊化簡述
下一篇:egg-jwt的使用
