如何在Maven中使用Typescript配置Angular2应用程序?

Gendaful:

我是Angular2的新手。我项目的技术堆栈是Angular2,带有打字稿和spring作为后端。我不想按照指示使用节点服务器来编译前端,但是我将需要使用TOMCAT和Maven代替。我有几个问题。

  1. 我猜节点服务器会为每个.ts文件生成.js和.js.map,因为浏览器只能理解.js文件。我的理解正确吗?如何使用Maven和Tomcat完成此任务?
  2. 我想使用Maven从头开始构建我的应用程序。我更喜欢Bower作为前端任务管理器。

谁能给我循序渐进的指南,以使用“ bower或任何其他前端任务管理工具(例如,缩小文件,创建应用程序支架”和“用于后端任务管理的Maven”)创建Angular2 + Spring应用程序?我愿意提出任何建议。

史蒂夫·帕克(Steve Park):

我正在使用Maven在Angular 2 + Spring Boot应用程序中使用Typescript .ts文件。我运行npm install以获得依赖关系,并运行npm tsc通过exec-maven-plugin将.ts文件转换为.js

以下是我pom.xml中的插件部分。在我的应用程序中,pacakge.json,tsconfig.json和Types.json都在src / main / resources路径下,因此在该路径下运行npm任务

pom.xml

<parent>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-parent</artifactId>
     <version>1.3.5.RELEASE</version>
</parent>

<packaging>war</packaging>


<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <executions>
                <execution>
                    <id>exec-npm-install</id>
                    <phase>generate-sources</phase>
                    <configuration>
                        <workingDirectory>${project.basedir}/src/main/resources</workingDirectory>
                        <executable>npm</executable>
                        <arguments>
                            <argument>install</argument>
                        </arguments>
                    </configuration>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                </execution>
                <execution>
                    <id>exec-npm-run-tsc</id>
                    <phase>generate-sources</phase>
                    <configuration>
                        <workingDirectory>${project.basedir}/src/main/resources</workingDirectory>
                        <executable>npm</executable>
                        <arguments>
                            <argument>run</argument>
                            <argument>tsc</argument>
                        </arguments>
                    </configuration>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

我的Angular2 + Spring Boot应用程序文件夹结构如下

src/main/resources
                  /app          - .ts and converted .js
                  /css
                  /images
                  /js           - systemjs.config.js is also placed here
                  /node_modules - generated by npm install and will include in war
                  /typings
                  application.properties
                  package.json
                  tsconfig.json
                  typings.json

src/main/webapp
               /WEB-INF
                       /jsp     - all .jsp files

在.jsp文件头部分,包含systemjs.config.js

<script type="text/javascript" src="webjars/zone.js/0.6.12/dist/zone.js"></script>
<script type="text/javascript" src="webjars/reflect-metadata/0.1.3/Reflect.js"></script>
<script type="text/javascript" src="webjars/systemjs/0.19.27/dist/system.js"></script>
<script type="text/javascript" src="js/systemjs.config.js"></script>

这也是我的WebMvcConfigurerAdapter代码到映射路径

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.my.controller")
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        if (!registry.hasMappingForPattern("/webjars/**")) {
            registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
        }
        if (!registry.hasMappingForPattern("/images/**")) {
            registry.addResourceHandler("/images/**").addResourceLocations("classpath:/images/");
        }
        if (!registry.hasMappingForPattern("/css/**")) {
            registry.addResourceHandler("/css/**").addResourceLocations("classpath:/css/");
        }
        if (!registry.hasMappingForPattern("/js/**")) {
            registry.addResourceHandler("/js/**").addResourceLocations("classpath:/js/");
        }
        if (!registry.hasMappingForPattern("/app/**")) {
            registry.addResourceHandler("/app/**").addResourceLocations("classpath:/app/");
        }
        if (!registry.hasMappingForPattern("/node_modules/**")) {
            registry.addResourceHandler("/node_modules/**").addResourceLocations("classpath:/node_modules/");
        }
    }

    @Bean
    public InternalResourceViewResolver internalViewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/jsp/");
        viewResolver.setSuffix(".jsp");
        viewResolver.setOrder(1);
        return viewResolver;
    }
}

我想提到的一件事是,如果操作系统是Windows或Mac,则在eclipse上运行exec-maven-plugin会有一些漏洞。Linux(Ubuntu)看起来完全没有问题。在Windows或Mac上从eclipse运行构建时,问题是它不理解npm命令并尝试查找此类文件,即使maven构建在终端或命令窗口上完全正常。

为了解决这个问题,我做了一些调整。对于Mac,如下所示/ usr / bin路径下为node和npm进行符号链接但是不允许修改/ usr / bin,因此我是在通过恢复磁盘重新启动后完成的

lrwxr-xr-x     1 root   wheel        17 May 22 03:01 node -> ../local/bin/node
lrwxr-xr-x     1 root   wheel        44 May 22 02:50 npm -> ../local/lib/node_modules/npm/bin/npm-cli.js

对于Windows,我在如下所示的系统路径下制作了node.bat和npm.bat文件。完成此操作后,在Windows 10上的Eclipse和Command窗口中,maven的构建都完全正常。

高于海平面

@echo off
set arg1=%1
set arg2=%2
set arg3=%3
set arg4=%4
C:\Progra~1\nodejs\npm.cmd %arg1% %arg2% %arg3% %arg4%

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Angular2应用程序中使用MediaRecorder对象?

如何在Angular 2 TypeScript应用程序中使用moment.js库?

如何在PHP应用程序中使用Angular 2?

如何将Angular2 TypeScript应用程序编译为单个文件?

如何在Visual Studio Code中调试Angular2 TypeScript应用程序?

如何在Jsfiddle中使用Angular2和Typescript

如何在应用程序主机端口以外的其他端口上使用angular2的http?

Angular2应用程序的配置-Nginx和Docker

在Angular2应用程序中使用element-resize-detector库

如何在webpack中使用angular-cli在angular2应用程序中导入xml2js

如何在Angular2应用程序中使用Bootstrap下拉菜单?

如何在Angular / Angular2 / Angular4应用程序中导入和使用particles.js

如何在angular2 / ionic 2打字稿应用程序中使用Numeral.js库?

如何在可能没有托管配置提供程序的应用程序中使用托管配置?

如何在Angular2 Web应用程序中正确使用ngFor?

如何在Angular 4应用程序中使用angulartics2(Adobe Analytics)跟踪事件

在angular2应用程序中使用Vaadin网格

如何在angular 2应用程序中使用php作为后端语言?

如何在带有角度cli的angular2应用程序中使用gulp浏览器浏览器同步?

如何在angular2-meteor应用程序中使用momentjs npm-package?

如何使用Visual Studio 2015使用TypeScript将应用程序见解配置为angular 2应用程序

如何在angular2应用程序中使用html代码

如何在angular2应用程序中使用Braintree的嵌入式UI?

如何在 angular2 应用程序中使用第二个路由器插座?

如何在 angular2 应用程序中使用 Firebase 电话号码身份验证?

如何在 angular 2 应用程序中使用 npm 为工具提示安装 qtip2?

如何在 Angular 7 应用程序中使用 GWT 应用程序作为组件?

如何在 IIS 中使用路由配置 Angular 应用程序?

如何在 Angular 2 应用程序的 SCSS 文件中使用动态数据?