標籤:應用 cti 說明 cap 思想 副檔名 .exe 組織 exit
1. Node.js中的模組化簡介
2. Node.js的核心模組
使用核心模組之前首先要匯入模組
path模組
- 匯入模組 var path = require("path");
basename() 擷取檔案名稱+尾碼
path.basename("/foo/hello/world/123.html") //第二個參數,去掉擷取的檔案名稱中的相同部分 path.basename("c:/foo/hello/world/123.html",".html")
dirname() 擷取目錄
path.dirname("/foo/hello/world/123.html")
extname() 擷取檔案的副檔名
path.extname("/foo/hello/world/123.html")
join() 合并路徑
var p1 = "c://abc/xyz"; var p2 = "/123/456"; console.log(path.join(p1,p2));
parse() 把路徑轉換為一個對象
path.parse("c:\\home\\hello\\world\\123.html") { root: ‘c:/‘, dir: ‘c://home/hello/world‘, base: ‘123.html‘, ext: ‘.html‘, name: ‘123‘ }
format() 把一個路徑對象轉換成一個路徑字串
var obj = { root: ‘c:\\‘, dir: ‘c:\\home\\hello\\world‘, base: ‘123.html‘, ext: ‘.html‘, name: ‘123‘ } console.log(path.format(obj));
delimiter 環境變數的分隔字元,可以跨平台 windows下是; 其它平台 :
- path.sep 路徑的分隔字元 windows下是\ 其它下是/
- isAbsolute() 是否是絕對路徑
url模組
- 匯入模組 var url = require("url");
parse() 把字串的路徑轉換成對象
var uri = "http://www.baidu.com:8080/images/1.jpg?version=1.0&time=1123#abcd"; console.log(url.parse(uri));
format() 把路徑對象轉換成字串
var obj = { protocol: ‘http:‘, slashes: true, auth: null, host: ‘www.baidu.com:8080‘, port: ‘8080‘, hostname: ‘www.baidu.com‘, hash: ‘#abcd‘, search: ‘?version=1.0&time=1123‘, query: ‘version=1.0&time=1123‘, pathname: ‘/images/1.jpg‘, path: ‘/images/1.jpg?version=1.0&time=1123‘, href: ‘http://www.baidu.com:8080/images/1.jpg?version=1.0&time=1123#abcd‘ }; var str = url.format(obj); console.log(str);
3. 核心模組存在哪裡?
- 核心模組儲存在node.exe中,當node.exe啟動並執行時候,核心模組會被載入,require的時候會載入到記憶體
- 在github上可以找到原始碼,lib檔案夾下
- 核心模組的執行速度比較快
4. 檔案模組(自訂模組)
定義檔案模組 add.js
function add(a,b) { return a + b; } //匯出成員 exports.add = add; //module.exports.add = add;
使用檔案模組 main.js
var obj = require("./add.js"); console.log(obj.add(5,6));
5. 包
| 名稱 |
功能 |
| name |
包名稱 |
| description |
包介紹,介紹包的功能 |
| version |
版本號碼,用於版本控制 |
| keywords |
關鍵詞數組,用於在npm中搜尋 |
| main |
require引入包時優先檢查此欄位 |
| dependencies |
標記當前包所依賴的包列表,npm會自動載入依賴的包 |
| Author |
包作者 |
| License |
開源許可 |
{ "name": "calcpack", "version": "1.0.0", "description": "", "main": "app.js", "scripts": { //可以通過npm run來執行 "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC"}
建立包的標準方式
- npm init -y 自動建立package.json
一個標準包的結構
名稱 |功能 |---|---| package.js |包描述檔案 bin |存放可執行檔 lib |存放JavaScript代碼 doc |存放文檔 test |存放單元測試用例代碼 README.md |說明文檔,描述包的作用和用法
- 標準包執行過程
- 將calcpack當做核心模組載入,載入不成功
- 自動去目前的目錄中的node_modules中找檔案名稱為calcpack的包
- 如果在calcpack中有package.json的話,並且指定了main屬性的值,優先載入main指定的.js模組(出口模組)
- 如果沒有package.json,或沒有指定main屬性,自動去calcpack找index.js的出口模組(匯出的模組)
- 如果找不到index.js報錯
6. 發布包
安裝包
- 從網路安裝
- 目前的目錄安裝 npm install 包名
- 全域安裝 npm install 包名 -g
- 本地安裝 npm install 包的路徑
- 卸載包 npm uninstall 包名
require()載入規則
- 優先從緩衝載入模組或者包
- 負載檔案模組要使用相對路徑 ./ ../
- 檔案模組的載入可以不寫尾碼名,如果不寫尾碼名按照 .js > .node > .json的順序載入
- 載入json檔案,推薦寫上尾碼.json
- 載入核心模組或包,不寫路徑和尾碼
- module.paths 載入node_modules的時候,按此數組的順序載入
Nodejs的模組化