2016-05-12 82 views
12

當某人安裝my-package時,我想安裝一個pre-commit git鉤子(即刪除代碼)。如何在「npm install」上安裝git鉤子?

我嘗試添加postinstall腳本:

"scripts": { 
    "postinstall": "./scripts/install-git-hooks" 
} 

這個偉大的工程。當有人運行npm install時,他們得到安裝的pre-commit鉤子。

但是,如果another-package取決於my-package,運行npm installanother-package運行postinstall腳本爲好,這是不希望。

什麼是最乾淨的方法來避免這種不良影響?

+0

這看起來像一個XY問題。你在問關於Y的問題,但是爲了得到在更大的圖片中有用的答案,你應該給我們提供關於X的信息。爲什麼你的程序包首先安裝git鉤子? – Louis

+0

@Louis我想強制用戶在他們提交之前將他們的代碼綁定。我可以指導用戶在運行'npm install'後運行'npm run install-git-hooks',但我想自動執行此操作。 –

+0

爲了公平,大多數npm包都有一些安裝後的例程,您需要在項目上運行,您是否需要手動執行它。類型,jspm,茉莉花等等等等。 –

回答

5

您可以使用ghooks npm模塊並將其添加爲dev-dependency。你可以配置你的package.json提交之前運行的內容,如下所示:

[...] 
"config": { 
    "ghooks": { 
     "pre-commit": "npm test" 
    } 
} 
[...] 
3

哈克,但可能適合你。

訣竅是識別(在腳本內)它是否是NPM安裝的子依賴項或根相關性。只需檢查../../package.json是否存在。如果是這樣,它是一個子依賴項,你應該跳過安裝鉤子。

需要注意的是,您打破了任何一致的安裝規則,這與安裝腳本的精神完全背道而馳。這是爲了安裝不能被任何方式信任的客戶端鉤子,如果你需要執行linting,這應該在服務器端完成,它只能拒絕不符合的代碼。

像你提到的那樣,這個問題可能會更好地解決,將它作爲一個自定義安裝腳本,並只處理額外的通信開銷。