我的maven项目具有以下结构:
目前,webpack似乎是javascript打包中的新东西,npm似乎是一个合适的包管理器。所以我尝试了以下内容: - 基本模块使用webpack创建npm包(使用npm包) - 模块1和2使用指向npm包
的基本模块目标文件夹的相对路径手动安装此捆绑包为什么我没有使用npm发布? - 无法更新已发布的npm包,因此每个构建都需要创建一个新的版本号 - 它需要建立互联网连接
其他选择? - 我想过使用maven资源插件,但这似乎包括很多手工工作(文件名,文件夹等)
所以我要求的是:你是否在同一个项目中的maven模块之间共享javascript代码?你是如何实现这一目标的?必须有更好的方法,或者?
如果您想查看我的项目,请查看此处:https://github.com/stefanrinderle/softvis3d
提前感谢您的回答!
答案 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 publish
和npm link
是一个要走的路。对于更大的功能块,尤其是具有特定使用配置文件的功能(例如,用户配置文件编辑器或配置页面 - 每次都不使用),可以动态加载这些功能块。
虽然其中没有任何新内容,但这个领域(POM,JAR,NPM和JS / ES6模块)似乎正在寻找最佳方法,并且需要一些时间来解决几个强大的技术问题。我不知道一个干净的,绝对没有创可贴,一套规则和设置来处理它。