avatar

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: 作者有親自寫了一篇更詳細的說明**

powered by WebMention.io

You can skeet this post or discuss it on BlueSky, the comments will show up here.
0Likes0Replies0Mentions

Be the first one to share this article!