2016-01-09 53 views
5

我Maven項目具有以下結構:如何共享行家模塊之間的JavaScript代碼

  • 「基地」 模塊 - 包含共享的java文件 - 應包含共享javascript文件
  • 模塊1 - 使用共享的java文件作爲maven的依賴關係 - 應該使用共享的JavaScript文件?
  • 模塊2 - 使用共享的java文件作爲maven的依賴關係 - 應該使用共享的javascript文件嗎?

目前,webpack似乎是JavaScript包裝中的新東西,npm似乎是一個合適的包管理器。所以我試過如下: - 基本模塊使用的WebPack 創建NPM束(與NPM包) - 模塊1和2安裝此軟件包使用到其中NPM包是

基部模塊目標文件夾的相對路徑手動爲什麼我不使用npm發佈? - 它不可能更新發布的NPM包,所以每個版本都需要創建一個新版本號 - 它需要互聯網連接來構建

其他選項? - 我想使用Maven資源插件,但這似乎是包括很多手動工作(文件名,文件夾等)

所以我要求的是:你之間共享JavaScript代碼同一個項目中的Maven模塊?你如何實現這一目標?必須有更好的方法來做到這一點,或?

如果你想看看我的項目,看看這裏:https://github.com/stefanrinderle/softvis3d

預先感謝您的回答的意見!

+1

我想https://maven.apache.org/plugins/maven-remote-resources-plugin/可能很有用,但我不能給你完整的答案,因爲你的例子不夠簡單易懂。考慮添加非常基本的例子(Maven multimodule,3-4個項目,1個JS文件等)和明確的期望 – michaldo

+0

我猜OP給你完全訪問他/她的github repo ... –

+0

@RajaAnbazhagan,我不想滿訪問回購。我建議根據http://stackoverflow.com/help/mcve準備示例(無論如何,問題已解決,因此案例已關閉) – michaldo

回答

4

基本上要分別重新分配npm模塊,你應該使用npm publish。雖然在開發時間,npm有很好的功能npm link,它將本地文件夾鏈接爲全局依賴,並使npm使用它而不是從存儲庫下載。所以,我剛剛爲您的項目添加了npm link並更改了節點安裝目錄,以便所有子模塊使用相同的節點實例。通過這種方式,您可以輕鬆開發模塊並隨時發佈。

鹼/ pom.xml中:

<plugin> 
    <groupId>com.github.eirslett</groupId> 
    <artifactId>frontend-maven-plugin</artifactId> 
    ... 
    <configuration> 
    ... 
    <installDirectory>../node</installDirectory> 
    </configuration> 
    <executions> 
    <execution> 
     <id>npm link</id> 
     <goals> 
     <goal>npm</goal> 
     </goals> 
     <configuration> 
     <arguments>link</arguments> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

..module/pom.xml的

<plugin> 
    <groupId>com.github.eirslett</groupId> 
    <artifactId>frontend-maven-plugin</artifactId> 

    <configuration> 
    <installDirectory>../node</installDirectory> 
    </configuration> 
    <executions> 
    <execution> 
     <!-- link before install --> 
     <id>npm link softvis3d-viewer</id> 
     <goals> 
     <goal>npm</goal> 
     </goals> 
     <configuration> 
     <arguments>link softvis3d-viewer</arguments> 
     </configuration> 
    </execution> 
    <execution> 
     <id>npm install</id> 
     <goals> 
     <goal>npm</goal> 
     </goals> 
    </execution> 
    ... 
    </executions> 
</plugin> 

..module /的package.json

"devDependencies": { 
    ... 
    "softvis3d-viewer": "0.0.4-SNAPSHOT" 
    }, 

看看my commit

細節
+0

這是一個非常好的選擇。我不知道npm鏈接,似乎我已經在一個很好的方式。感謝提供提交,它已經集成到主項目中。 – user984200

0

NPM的作品如果Maven模塊提供將進行轉譯/縮小/串聯的JavaScript。如果需要共享預編譯模塊,我成功使用web-fragment.xml(在Servlet 3.0規範中定義),並將我的JavaScript等放在META-INF /資源下。根據您的前端技術,您需要使用與代碼拆分或Web組件相關的一些方法。

實際上,客戶端在運行任何依賴它的任何東西之前,都需要加載和執行庫代碼。

如果你有一個帶有特定API的小型庫,你希望在你的Maven模塊之間共享,並且它是同一生態系統的所有部分,npm publishnpm link是一種可行的方法。對於更大的功能塊,尤其是那些具有特定使用配置文件的塊(例如,用戶配置文件編輯器或配置頁 - 每次不使用),可以動態加載這些塊。雖然沒有什麼是新的,但是這個領域(POM,JAR,NPM和JS/ES6模塊)似乎是在尋找最佳方法,並且需要一些時間來解決一些強大的技術問題。我不知道一個乾淨的,絕對沒有樂隊幫助,一套規則和設置來處理它。