在使用许多不同的框架(Symfony,Ruby-On-Rails,Angular)之后,我发现了Laravel框架,并且发现它非常好。
我想将Laravel作为后端应用程序的优势与使用Angular 2创建出色前端的可能性结合起来。
我设法通过创建Angular应用程序手动集成它们,然后deploy it,然后将其导出到我的laravel应用程序的公共目录。
我还找到了this article。
然而,我发现很难相信没有更简单的方法。 我很乐意利用伟大的Angular CLI和composer,让他们为我做的工作,但却找不到任何相关的东西。
(我发现this one,但无法让它发挥作用......)
是否有一些开箱即用的解决方案?
答案 0 :(得分:2)
在我看来,简单的方法是在保持Angular和Laravel 2尽可能分离并且不必使用第三方软件包的同时,通过编写一个小的bash脚本来为您完成此操作。
您可以正常启动Laravel服务器,正常启动Angular开发服务器,当您准备好部署时,只需运行一行脚本来构建Angular项目并将文件移动到相应的Laravel文件夹,瞧。
唯一的先决条件是您需要让您的Laravel路线包含一个将每个请求定向到resourves/views/index.blade.php
的邮件。
这是我前一段时间制作的剧本:
#!/usr/bin/env bash
green='\033[1;32m'
nc='\033[0m'
say()
{
printf "${green}=> $1${nc}\n"
}
cp_to_laravel()
{
say 'Removing old files from public'
rm -rf public/assets
mkdir public/assets
say 'Copying "client/dist" to "public/assets"'
cp -r client/dist/ public/assets/
say 'Flattening assets'
cp -r public/assets/assets/ public/assets/
rm -rf public/assets/assets
say 'Copying "client/dist/index.html" to "resources/views/index.blade.php"'
cp client/dist/index.html resources/views/index.blade.php
say 'Build complete!'
}
say 'Building client with --aot and --prod'
cd client
ng build --aot --prod
cd ..
cp_to_laravel
从Laravel项目的根目录开始,使用bash build-client.sh
或sh build-client.sh
运行脚本。
上面的脚本假设您的项目结构如下所示:
- app
- bootstrap
- client // Angular project inside here
- dist
- node_modules
- src
.angular-cli.json
// ...
- config
- database
- public
- resources
- routes
- storage
- tests
build-client.sh
// ...
这就是它的作用:
ng build -prod -aot
来构建项目。cp_to_laravel
函数,该函数执行以下操作:
public/assets
中的内容,以防前一个版本中有任何先前的文件client/dist
复制到public/assets
public/assets/assets
的内容移至public/assets
来删除双重资产文件夹(这是必要的,因为ng build -prod -aot
将创建自己的资源文件夹,这就是为什么有一个重复的client/dist/index.html
的内容复制到resources/views/index.blade.php