我想构建我的Angular 2前端并将其部署到Tomcat应用服务器。为了开始,我完全按照以下介绍的步骤进行操作:https://angular.io/docs/ts/latest/guide/webpack.html。
所以我有以下项目结构(所有文件都与上面提到的引言完全相同):
angular2-的WebPack
---配置
------- helpers.js
------- karma.conf.js
-------卡玛 - 测试 - shim.js
------- webpack.common.js
------- webpack.dev.js
------- webpack.prod.js
------- webpack.test.js
--- DIST
--- node_modules
---公共
------- CSS
-------------- styles.css的
-------图像
-------------- angular.png
--- SRC
-------应用
-------------- app.component.css
-------------- app.component.html
-------------- app.component.spec.ts
-------------- app.component.ts
-------------- app.module.ts
------- index.html的
------- main.ts
------- polyfills.ts
------- vendor.ts
---分型
--- karma.conf.js
---的package.json
--- tsconfig.json
--- typings.json
--- webpack.config.js
npm start 分别为webpack-dev-server --inline --progress --port 3000
→按预期工作
当我分别运行 npm build rimraf dist && webpack --config config/webpack.prod.js --progress --profile --bail
时,它会构建应用程序而不会出现错误,并且输出包文件会按预期物理放置在dist文件夹中。
DIST
---资产
------- angular.png
--- app.css
---app.css.map
--- app.js
---app.js.map
--- index.html的
--- polyfills.js
---polyfills.js.map
--- vendor.js
---vendor.js.map
接下来,我将dist文件夹的内容复制到Tomcat 9.0的webapps目录中。当我尝试访问已安装的应用程序时,我收到.css-和.js文件(which can be seen in the attached picture)的404错误。 它试图从错误的URL中获取文件→“/ obv /”丢失。
我真的被困在这里,我觉得我已经尝试过在互联网上找到的关于这个话题的所有内容。
有人可以告诉我我做错了什么吗?提前谢谢。
答案 0 :(得分:13)
问题与标记<base href="/" />
有关。使用像tomcat这样的网络服务器或尝试使用firefox index.html
直接从文件系统加载应用程序时,这是错误的。必须将其更改为<base href="./" />
。当应用程序仍有问题时,请检查脚本文件的导入方式。我尝试将angular2-webpack与tomcat一起使用,并且还需要将所有脚本标记更改为不在src属性中使用前导斜杠。
<script src="js/vendor.js" ></script>
使用webpack,行为由属性output.publicPath
控制。在angular2 documentation和angular2-webpack中,此设置为
output.publicPath="/"
这导致链接中的绝对路径。删除webpack时将使用相对路径,脚本和图像的链接可以正常工作。
答案 1 :(得分:5)
如果您没有使用HashLocationStrategy,那么刷新将为您提供404 for tomcat部署。在这种情况下,您必须使用web.xml作为解决方案,并提供指向index.html的所有路由。以下是您可以应用于路径的代码片段,然后Angular路由将处理此问题。
<servlet>
<servlet-name>index</servlet-name>
<jsp-file>/index.html</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>index</servlet-name>
<url-pattern>/home</url-pattern>
</servlet-mapping>
如前面其他人所建议的那样,配置你的index.html(by)加载应用程序。
答案 2 :(得分:2)
我不得不使用@ alokstar答案的略微变化。我还必须添加“-d”或“--deploy”标志。这可能是由于版本的变化。
我正在运行angular-cli版本:1.0.0-beta.28.3
注意: * ng构建文档生产标志为“-prod”而不是“--prod”
我的tomcat在端口8080上运行,我可以使用:http://localhost:8080/my_app
访问该应用答案 3 :(得分:0)
答案 4 :(得分:0)
我有类似的情况。使用angular-2和webpack准备好前端应用程序,我想在tomcat服务器上部署它。我按照以下步骤操作:
在Angular 2项目文件夹中运行命令“ng build --prod --bh / [要为生产扩展的URL]”。
它会在你的angular2应用程序中创建dist文件夹。步骤1中的'your-project-name'将用于tomcat服务器URL。
复制新创建的dist文件夹的所有文件。将它们粘贴到Java应用程序的webapps文件夹中。
创建战争文件。
在服务器上部署该战争。
希望它有所帮助!
答案 5 :(得分:0)
这是我在tomcat上部署我的应用程序的方式。 这完全取决于您在 index.html 中提供的 base href 。 所有图片都应保存在'assets'文件夹下。并且项目中任何图像的路径必须是相对的,从此文件夹开始,即
SRC =的 “资产/ IMG / img1.jpg”强> 的
执行此操作时,将删除找不到文件的难度,这将在部署应用程序时出现。
现在,这些步骤将完成其余的工作。
可以在http://localhost:8080/my_app
访问申请表如果你不想为你的应用程序使用上下文'myApp',那么尝试 base href ='。/'或者只使用命令 ng build --prod进行生成构建强>
这对我的情况有帮助。希望,它有所帮助。