2016-01-09 55 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模块)似乎是在寻找最佳方法,并且需要一些时间来解决一些强大的技术问题。我不知道一个干净的,绝对没有乐队帮助,一套规则和设置来处理它。