如何在maven模块之间共享javascript代码

时间:2016-01-09 09:55:10

标签: javascript maven npm webpack

我的maven项目具有以下结构:

  • “基础”模块 - 包含共享的java文件 - 应包含共享的javascript文件
  • 模块1 - 使用共享的java文件作为maven依赖项 - 应该使用共享的javascript文件吗?
  • 模块2 - 使用共享的java文件作为maven依赖项 - 应该使用?
  • 使用共享的javascript文件

目前,webpack似乎是javascript打包中的新东西,npm似乎是一个合适的包管理器。所以我尝试了以下内容: - 基本模块使用webpack创建npm包(使用npm包) - 模块1和2使用指向npm包

的基本模块目标文件夹的相对路径手动安装此捆绑包

为什么我没有使用npm发布? - 无法更新已发布的npm包,因此每个构建都需要创建一个新的版本号 - 它需要建立互联网连接

其他选择? - 我想过使用maven资源插件,但这似乎包括很多手工工作(文件名,文件夹等)

所以我要求的是:你是否在同一个项目中的maven模块之间共享javascript代码?你是如何实现这一目标的?必须有更好的方法,或者?

如果您想查看我的项目,请查看此处:https://github.com/stefanrinderle/softvis3d

提前感谢您的回答!

2 个答案:

答案 0 :(得分:4)

基本上,要分别重新分配npm模块,您应该使用npm publish。但是,在开发时,npm具有很好的功能npm link,它将您的本地文件夹链接为全局依赖项,并使npm使用它而不是从存储库下载。因此,我刚刚将npm link添加到您的项目并更改了节点安装目录,因此所有子模块都使用相同的节点实例。通过这种方式,您可以轻松地开发模块,并在您准备就绪时发布。

base / 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>

..模块/ 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>

..模块/的package.json

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

请参阅my commit

中的详细信息

答案 1 :(得分:0)

如果Maven模块提供将进行转换/缩小/连接的JavaScript,NPM将起作用。如果需要共享预编译模块,我成功使用web-fragment.xml(在Servlet 3.0规范中定义)并将我的JavaScript等放在META-INF / resources下。根据您的前端技术,您需要使用与代码拆分或Web组件相关的一些方法。

实质上,客户端需要在运行依赖于它的任何内容之前加载并执行库代码。

如果您有一个小型(-ish)库,您希望在Maven模块之间共享特定的API,并且它是同一生态系统的一部分,npm publishnpm link是一个要走的路。对于更大的功能块,尤其是具有特定使用配置文件的功能(例如,用户配置文件编辑器或配置页面 - 每次都不使用),可以动态加载这些功能块。

虽然其中没有任何新内容,但这个领域(POM,JAR,NPM和JS / ES6模块)似乎正在寻找最佳方法,并且需要一些时间来解决几个强大的技术问题。我不知道一个干净的,绝对没有创可贴,一套规则和设置来处理它。