gpt4 book ai didi

dependencies - Maven项目中的RequireJS编译与外部JS依赖

转载 作者:行者123 更新时间:2023-12-03 12:52:49 25 4
gpt4 key购买 nike

我有一个使用 Maven 构建的 Web 项目,我正在尝试找出使用 RequireJS 编译器编译 JavaScript 文件的最佳方法(这个问题也适用于任何编译器/压缩器)。

我有一个可行的设置,但需要改进:

我已经打包了第 3 方 JavaScript 库,它们作为依赖项被下载,然后与 WAR Overlay 插件一起添加。

我有一个 Exec 插件任务,它在目标目录中运行 RequireJS 编译器。我目前手动运行 exec:exec在包目标运行之后(因此 WAR 内容被放置在目标目录中)。

我想要的是让 JS 编译成为主要(Java)编译的一部分。 JS 编译器本身(需要 JS)在编译后发生的 WAR 覆盖阶段作为依赖项下载。因此,我需要下载和解压缩 Require JS 文件,并且我需要在 Java 编译之前/期间/之后使用这些文件运行 JS 编译。

我敢肯定有几种方法可以实现这一目标。我正在寻找最优雅的解决方案。

更新:现有 POM 片段

我有 JavaScript 依赖项,我已经压缩并添加到我们的存储库管理器中:

    <dependency>
<groupId>org.requirejs</groupId>
<artifactId>requirejs</artifactId>
<version>0.22.0</version>
<classifier>repackaged</classifier>
<type>zip</type>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.jqueryui</groupId>
<artifactId>jquery-ui</artifactId>
<version>1.8.7</version>
<classifier>repackaged</classifier>
<type>zip</type>
<scope>runtime</scope>
</dependency>

请注意,RequireJS 本身(编译其余库所必需的)也作为外部依赖项加载。所以第一件事是,我需要先下载并解压缩此依赖项,然后才能开始进行 RequireJS 编译。

使用 WAR Overlay 插件将这些依赖项添加到 WAR:
        <plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<overlays>
<overlay>
<groupId>org.requirejs</groupId>
<artifactId>requirejs</artifactId>
<classifier>repackaged</classifier>
<type>zip</type>
<targetPath>lib</targetPath>
<includes>
<include>requirejs/require.js</include>
<include>requirejs/require/*</include>
<include>requirejs/build/**</include>
</includes>
</overlay>
<overlay>
<groupId>com.jqueryui</groupId>
<artifactId>jquery-ui</artifactId>
<classifier>repackaged</classifier>
<type>zip</type>
<targetPath>lib</targetPath>
</overlay>
</overlays>
</configuration>
</plugin>

即使我不需要 requirejs/build/**为了在 WAR 中结束,我将它作为覆盖的一部分来获取解压缩的 RequireJS 构建脚本,仅仅是因为我还没有找到更好的方法。

然后我有一个执行编译的 Exec 插件任务。但请注意,此任务尚未添加到正常的编译工作流程中:我必须使用 mvn exec:exec 手动调用它。 之后 WAR打包完成:
        <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>lib/requirejs/build/build.bat</executable>
<workingDirectory>${project.build.directory}/${project.artifactId}</workingDirectory>
<arguments>
<argument>name=bootstrap</argument>
<argument>out=combined.js</argument>
<argument>baseUrl=scripts</argument>
<argument>optimize=closure</argument>
<argument>excludeShallow=plugins/manifest</argument>
</arguments>
</configuration>
</plugin>

所以,一些问题是:
  • 如何为编译和 WAR 打包步骤提取单个压缩依赖项的不同部分?还是我必须创建两个 zip 文件,一个仅包含运行时内容,另一个用于编译脚本?
  • 我想触发exec:exec理想情况下是在编译期间,或者如果不是,就在 WAR 打包之前。我怎么做?

  • 我实际上已经尝试了很多没有成功的东西,所以我希望我不会显得懒惰地发布大量代码并等待答案:) 只是我还没有完全了解 Maven 的目标/阶段等工作呢。

    最佳答案

    关于dependencies - Maven项目中的RequireJS编译与外部JS依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4663686/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com