沒搞懂的package.json


事情是這樣的,今天上午,后端同學 clone 了我們的一個小程序項目,希望到自己的電腦上跑起來。

然而,令人尷尬的是,他在 npm install 之后,項目並沒有如願運行,並拋出一個大大的錯誤。

后來, 另一個前端同學靈機一動,將自己的 node_modules 拷給了他,小程序終於如願在他電腦上跑了起來。此后我們群里有了下面的對話:
WechatIMG320.jpeg

本人自認為臉皮還算不薄,但是說我們的 node_modules 是祖傳的,確實令人難以招架。。痛定思痛,為了防止被后端同學,乃至以后新來的前端同學 diss,我決定好好研究一下 package.json 這個文件。

在講解 package.json 之前,首先推薦阮老師的一篇文章,package.json 文件, 里面對需要了解的常用字段都有解釋,比如 dependencies, devDependencies,scripts,main,version字段等,這里就不講了。僅談談依賴的版本管理。

依賴的版本管理

如果一個項目做了不兼容的更改,並發布了一個大版本,你的項目依賴了他的庫,安裝完成之后,十有八九是要報錯的。所以我們要在package.json中告訴npm只能裝哪個版本,或者哪幾個版本的庫。規則如下(摘自上面的文章):

  • 指定版本:比如1.2.2,遵循“大版本.次要版本.小版本”的格式規定,安裝時只安裝指定版本。
  • 波浪號(tilde ~)+指定版本:比如~1.2.2,表示安裝1.2.x的最新版本(不低於1.2.2),但是不安裝1.3.x,也就是說安裝時不改變大版本號和次要版本號。
  • 插入號(caret ^)+指定版本:比如ˆ1.2.2,表示安裝1.x.x的最新版本(不低於1.2.2),但是不安裝2.x.x,也就是說安裝時不改變大版本號。需要注意的是,如果大版本號為0,則插入號的行為與波浪號相同,這是因為此時處於開發階段,即使是次要版本號變動,也可能帶來程序的不兼容。
  • latest:安裝最新版本。
  • Patch releases: 1.0 or 1.0.x or ~1.0.4
  • Minor releases: 1 or 1.x or ^1.0.4
  • Major releases: * or x
    以上的表示在pakage.json中都是合法的描述。除此之外,npm官方還提供了一個好用的工具,來告訴我們某個"表達式"會覆蓋到哪些版本:https://semver.npmjs.com/

uploading-image-410693.png

改動了依賴里的代碼怎么辦

這是上面說的那個祖傳node_modules的真正原因了,由於當時mpvue一個包實現的問題,以及我們在原生語法寫的項目中使用mpvue,我改動了包里的一行代碼,這是我們的可以work,而到后端那里就會報錯的根源所在。解決辦法有這么幾個:

1.提交給官方一個PR,等待merge

這個看官方的情況了,有可能很快merge,也可能快一年了還沒個結果。可行性指數:🌟🌟🌟

2. 將自己修改過的發一個包

這種方法需要有npm賬戶,然后熟悉publish package的流程。可行性指數:🌟🌟🌟,如果使用這種方法,不妨發一個scoped package,參考about scopesabout public packages

3.fork一份到自己的github下,修改之后,直接讓npm從github安裝這個包

關於 npm install的文檔可以看這里:https://docs.npmjs.com/cli-commands/install.html

此時package.json中的對應的字段應該是這樣:

"xxx": "git+https://github.com/xxx/koatest.git"

可行性指數:🌟🌟🌟🌟
在操作的時候注意一點,修改過的代碼merge到master分支上,不然裝完了還不能work(完)。

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM