Java及Node.js對dependency module的不同管理方式
自己有玩過Java又玩過Node.js,兩者對於library dependency是頗不同的做法,這篇文是想講講兩者的分別。 Java Java,多數是用maven or gradle來做library dependency management。 而我作為一個application developer,常常遇到一個問題: 我需要用到的libraries分別用到不同version的Spring或Jackson的不同version。 maven做法是會幫你resolve成同一個version。 但有時version conflict會出問題。 在Java裡面,不同library大多都是直接把class load到同一個class loader來用,所以不能存在multiple version的class。 很多時一些針對某些library來做的動作,都是直接hack/inject logic到那些class。 換句話說,Java的做法就像是有一個global空間,然後不同的library都放在裡面。 這樣把library都放在global空間好處就是,如果我是身為framework developer,這會較方便我去做middleware library,因為我可以直接掌控不同library。 而壞處就是,global空間如果library都各自有dependency,就很難統一manage,所以當library upgrade時就會較多問題/較痛苦。 Node.js 另一方面,Node.js的dependency management是另一種做法。 node.js裡,每個module之下都可以有自己的dependency及version。 […]