Node.js 0.8.17 & Npm 1.2.0

早上起來就看到新版釋出的消息,不過有幾個特別的地方,稍微註記一下。

首先 v0.8.17 有特別要處理一個安全性(Integer overflow)問題,如果有使用到 TypedArrays 的使用者,請儘速升級到這個版號。

另外,是伴隨著一起升版的npm,從1.2.0之後加入了peerDependencies的新功能,有興趣的可以先看一下先前成員們的討論串:

其實我看不太懂(炸),不過去翻了一下討論列到的文章&範例,看起來像是為了處理擴充(plugin)而延伸出來的東西。一樣是 在package.json裡使用peerDependeicies來定義,而列在上面的套件,安裝時會變成同層而不是從屬(sliding not child),而且會顯示錯誤如果安裝失敗。

// 如果你定義這樣
{
    "name": "pkgB",
    "version": "0.0.1",
    "dependencies": {
        "oauth": "*"
    },
    "peerDependencies": {
        "express": "3.0.x"
    }
}
{
    "name": "pkgC",
    "version": "0.0.2",
    "dependencies": {
        "passport": "*",
    },
    "peerDependencies": {
        "express": "3.0.x"
    }
}

// 然後另一個套件
{
    "name": "pkgA",
    "dependencies": {
        "pkgB": "~0.0.1",
        "pkgC": "~0.0.2"
    }
}
// 安裝之後會變這樣                               
{
    "name": "pkgA",
    "version": "0.0.1",
    "dependencies": {
        "pkgB": {
            "version": "0.0.1",
            "dependencies": {
                "oauth": {
                    "version": "0.9.8"
                }
            }
        },
        "pkgC": {
            "version": "0.0.2",
            "dependencies": {
                "passport": {
                    "version": "0.1.15"
                }
            }
        },
        "express": {
            "version": "1.1.0"
        }
    }
}

有看出端倪嗎 :p express被拉到pkgA套件相依的第一層,而不是在pkgB之下,這樣對於plugin的開發/測試將會更方便。@indexzero 有特別提到一點,這樣也可以順便把套件相依的關係拆的更細。有點像是達到繼承的效果,對於都是express的plugin,就不需要各自擁有一份,每個plugin都可以直接使用同個express。

想用新功能,請認明 >nodejs 0.8.17 || >npm 1.2.0,Enjoy!

* Update: 作者有親自寫了一篇更詳細的說明*

Ferrari Lee

Read more posts by this author.

Subscribe to Ferrari != Ferrari

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!