我在一个非常古老的角度项目上工作,我们在2.0版本上开始研究它,并在发布后升级它。我们现在在4.3
现在,该项目非常复杂,具有许多功能,以及许多(旧的)对等依赖项,而不再维护其中的一些。
我试图在这个项目中实现角度通用,以改善搜索引擎优化,但我一个接一个地遇到错误,看起来这没有尽头。
所以我的问题是:
欢迎所有答案和提示!
在旧项目上实现Angular universal可能真的非常痛苦:
我必须在一个旧项目上实现它,和你一样,我有很多编译错误。所以我决定将我的应用程序拆分为两个部分,即两个项目:
不好的部分是2个项目彼此独立,所以你不能使用像localStorage
,routerLink
等的东西。但它们连接到相同的API,所以你总是可以在它们之间共享数据
从技术上讲,我是这样做的:
app-universal
创建一个新的app-universal.module.ts
文件夹<base href="">
更改为<base href="/content">
angular-cli.json
中创建3个项目: "apps": [
{
"name": "app",
"root": "src",
"outDir": "dist",
"assets": [
"assets",
"favicon.ico"
],
"index": "index.html",
"main": "app/main.ts",
"polyfills": "polyfills.ts",
"test": "test.ts",
"tsconfig": "tsconfig.app.json",
"testTsconfig": "tsconfig.spec.json",
"prefix": "app",
...
},
{
"name": "universal",
"root": "src",
"outDir": "dist-universal",
"assets": [
"assets",
"favicon.ico"
],
"index": "app-universal/index.html",
"main": "app-universal/main.ts",
"polyfills": "polyfills.ts",
"test": "test.ts",
"tsconfig": "tsconfig.app.json",
"testTsconfig": "tsconfig.spec.json",
"prefix": "app-universal",
"...
},
{
"name": "server",
"platform": "server",
"root": "src",
"outDir": "src/app-universal/dist-universal-server",
"assets": [
"assets",
"favicon.ico"
],
"index": "app-universal/index.html",
"main": "app-universal/main.server.ts",
"test": "test.ts",
"tsconfig": "app-universal/tsconfig.server.json",
"testTsconfig": "tsconfig.spec.json",
"prefix": "app-universal",
...
}
],
package.json
上添加构建命令快捷方式:"scripts": {
"prebuild-server": "ng build --prod --aot --app server && ngc -p src/app-universal/tsconfig.server.json",
"build-server": "ts-node src/server.ts",
...
},
并运行npm run build-server
来编译您的简化应用程序并使用通用进行渲染。
Location
和ReverseProxy
在/
路径上启动我的主应用程序,以及我在/content
或/blog
或/whatever
路径上的简化应用程序:在/etc/apache2/site-availables/your-project.conf文件中(在<VirtualHost:.80>
块上,例如在DocumentRoot
之后):
ProxyRequests Off
ProxyPreserveHost On
ProxyVia Full
<Proxy *>
Require all granted
</Proxy>
<Location /content>
ProxyPass http://127.0.0.1:4000
ProxyPassReverse http://1127.0.0.1:4000
</Location>
然后你可以使用pm2
将你的Node.js应用程序保存在后台:How To Set Up a Node.js Application for Production on Ubuntu 16.04
那个waq完成了。我已将我的项目分成两个独立的子项目,并在同一个域上运行,所有的/content/*
url SEO友好
为了帮助您解决当前的普遍错误:qazxsw poi
如今有一个命令可以让你的生活更轻松:
Angular with universal does not work
你可以在这里读更多关于它的内容:
ng add @nguniversal/express-engine --clientProject <project-name>