Node學習筆記(二)
1.package.json詳解Node.js 在呼叫某個包時,會首先檢查包中 package.json 檔案的 main 欄位,將其作為包的介面模組,如果 package.json 或 main 欄位不存在,會嘗試尋找 index.js 或 index.node 作為包的介面。
package.json 是 CommonJS 規定的用來描述包的檔案,完全符合規範的 package.json 檔案應該含有以下欄位。
name:包的名稱,必須是唯一的,由小寫英文字母、數字和下劃線組成,不能包含空格。
description:包的簡要說明。
version:符合語義化版本識別①規範的版本字串。
keywords:關鍵字陣列,通常用於搜尋。
maintainers:維護者陣列,每個元素要包含 name、email(可選)、web(可選)欄位。
contributors:貢獻者陣列,格式與maintainers相同。包的作者應該是貢獻者陣列的第一個元素。
bugs:提交bug的地址,可以是網址或者電子郵件地址。
licenses:許可證陣列,每個元素要包含 type (許可證的名稱)和 url (連結到許可證文字的地址)欄位。
repositories:倉庫託管地址陣列,每個元素要包含 type (倉庫的型別,如 git )、url (倉庫的地址)和 path (相對於倉庫的路徑,可選)欄位。
dependencies:包的依賴,一個關聯陣列,由包名稱和版本號組成。
例項:
{
"name": "mypackage",
"description": "Sample package for CommonJS. This package demonstrates the required
elements of a CommonJS package.",
"version": "0.7.0",
"keywords": [
"package",
"example"
],
"maintainers": [
{
"name": "Bill Smith",
"email": "
}
],
"contributors": [
{
"name": "BYVoid",
"web": "http://www.byvoid.com/"
}
],
"bugs": {
"mail": "[email protected]",
"web": "http://www.example.com/bugs"
},
"licenses": [
{
"type": "GPLv2",
"url": "http://www.example.org/licenses/gpl.html"
}
],
"repositories": [
{
"type": "git",
"url": "http://github.com/BYVoid/mypackage.git"
}
],
"dependencies": {
"webkit": "1.2",
"ssl": {
"gnutls": ["1.0", "2.0"],
"openssl": "0.9.8"
}
}
}
2.本地模式與全域性模式相比的特點
模 式 可通過 require 使用 註冊PATH
本地模式 是 否
全域性模式 否 是
3. 如何在npm上釋出自己的包在釋出之前,首先需要讓我們的包符合 npm 的規範,npm 有一套以 CommonJS 為基礎包規範,但與 CommonJS 並不完全一致,其主要差別在於必填欄位的不同。通過使用 npm init 可以根據互動式問答產生一個符合標準的 package.json,例如建立一個名為 byvoidmodule 的目錄,然後在這個目錄中執行npm init:
這樣就在 byvoidmodule 目錄中生成一個符合 npm 規範的 package.json 檔案。建立一個index.js 作為包的介面,一個簡單的包就製作完成了。在釋出前,我們還需要獲得一個賬號用於今後維護自己的包,使用 npm adduser 根據提示輸入使用者名稱、密碼、郵箱,等待賬號建立完成。完成後可以使用 npm whoami 測驗是否已經取得了賬號。
接下來,在 package.json 所在目錄下執行 npm publish,稍等片刻就可以完成釋出了。開啟瀏覽器,訪問 http://search.npmjs.org/ 就可以找到自己剛剛釋出的包了。現在我們可以在
世界的任意一臺計算機上使用 npm install byvoidmodule 命令來安裝它。如果你的包將來有更新,只需要在 package.json 檔案中修改 version 欄位,然後重新使用 npm publish 命令就行了。如果你對已釋出的包不滿意(比如我們釋出的這個毫無意義的包),可以使用 npm unpublish 命令來取消釋出。
4.除錯
一.Node.js 支援命令列下的單步除錯。
二.使用 Eclipse 除錯 Node.js
三.使用 node-inspector 除錯 Node.js
在命令列下執行 node debug xx.js,將會啟動除錯工具:
命 令 功 能
run 執行指令碼,在第一行暫停
restart 重新執行指令碼
cont, c 繼續執行,直到遇到下一個斷點
next, n 單步執行
step, s 單步執行並進入函式
out, o 從函式中步出
setBreakpoint(), sb() 在當前行設定斷點
setBreakpoint(‘f()’), sb(...) 在函式f的第一行設定斷點
setBreakpoint(‘script.js’, 20), sb(...) 在 script.js 的第20行設定斷點
clearBreakpoint, cb(...) 清除所有斷點
backtrace, bt 顯示當前的呼叫棧
list(5) 顯示當前執行到的前後5行程式碼
watch(expr) 把表示式 expr 加入監視列表
unwatch(expr) 把表示式 expr 從監視列表移除
watchers 顯示監視列表中所有的表示式和值
repl 在當前上下文開啟即時求值環境
kill 終止當前執行的指令碼
scripts 顯示當前已載入的所有指令碼
version 顯示 V8 的版本
下面是一個簡單的例子:
$ node debug debug.js
< debugger listening on port 5858
connecting... ok
break in /home/byvoid/debug.js:1
1 var a = 1;
2 var b = 'world';
3 var c = function (x) {
debug> n
break in /home/byvoid/debug.js:2
1 var a = 1;
2 var b = 'world';
3 var c = function (x) {
4 console.log('hello ' + x + a);
debug> sb('debug.js', 4)
1 var a = 1;
2 var b = 'world';
3 var c = function (x) {
* 4 console.log('hello ' + x + a);
5 };
6 c(b);
7 });
debug> c
break in /home/byvoid/debug.js:4
2 var b = 'world';
3 var c = function (x) {
* 4 console.log('hello ' + x + a);
5 };
6 c(b);
debug> repl
Press Ctrl + C to leave debug repl
> x
'world'
> a + 1
2
debug> c
< hello world1
program terminated