2016-11-21 29 views
7

我有一個package.json文件和一個安裝bash腳本,其中包含其他步驟,運行npm install紗線和npm在實踐中是否可以互換?

我想更新腳本,使其運行yarn install如果yarn可用(利用紗線的緩存,鎖文件等),並回落到npm install否則。據我所知,所有的軟件包似乎都可以安裝並且可以正常工作。

yarnnpm是否可以互換,但這是一種可行的方法?或者是否有可能導致的潛在問題?在實踐中,我們是打算挑一個,還是與npm互換紗線?

(注意:我讀過這個closely related question,但我問這作爲一個單獨的問題,因爲它是關於明確支持兩紗和NPM安裝過程中的一個項目)

回答

4

紗和NPM(版本> = 3.0.0)應該相對兼容,特別是從npm 紗線,因爲兼容性是one of the stated goals of Yarn。如Migrating from npm中所述:

紗線可以使用與npm相同的package.json格式,並且可以從npm註冊表中安裝任何軟件包。

因此,從理論上講,任何對npm有效的package.json都應該同樣適用於紗線。請注意,我說npm v2可能不太兼容 - 這是因爲npm從嵌套node_modules結構遷移到平面佈局(這是Yarn使用的)。這就是說,紗線和NPM V3應該產生非常相似的佈局,因爲,在這個問題I linked說:

要我們應該儘量與node_modules佈局誰需要一個兼容的人非常兼容的第一近似,因爲這將是避免長尾兼容性問題的最可能途徑。

但是,您不會能夠採取由紗線產生的Yarn.lock的優勢,因爲(顧名思義),它僅由紗線的支持,npm shrinkwrap不兼容。

此外,正如@RyanZim指出的,舊版紗線不支持pre- and post-install hooks,但versions later than v0.16.1做。如果您依賴這些掛鉤,則需要向用戶指定需要大於v0.16.1的版本。總之,只要你沒有遇到錯誤,只使用兩個軟件包管理器共享的特性,你就不應該有任何問題。

+1

應該加上'yarn'不支持'postinstall'腳本。這對於大多數軟件包來說都不是問題,但有一些不能正確安裝。 – RyanZim

+0

@RyanZim它似乎已經根據GitHub修復 - 你知道主版本的變化嗎? – Aurora0001

+0

不知道,我實際上沒有使用紗線。我認爲紗線以安全爲由反對'postinstall'腳本。介意在Github上發佈一個鏈接到相關的主題? – RyanZim

相關問題