Laravel + Angular 2集成

时间:2017-12-14 12:02:09

标签: angular laravel laravel-5

在使用许多不同的框架(Symfony,Ruby-On-Rails,Angular)之后,我发现了Laravel框架,并且发现它非常好。

我想将Laravel作为后端应用程序的优势与使用Angular 2创建出色前端的可能性结合起来。

我设法通过创建Angular应用程序手动集成它们,然后deploy it,然后将其导出到我的laravel应用程序的公共目录。

我还找到了this article

然而,我发现很难相信没有更简单的方法。 我很乐意利用伟大的Angular CLIcomposer,让他们为我做的工作,但却找不到任何相关的东西。

(我发现this one,但无法让它发挥作用......)

是否有一些开箱即用的解决方案?

1 个答案:

答案 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.shsh 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
// ...

这就是它的作用:

  1. 将CD放入角度项目并运行ng build -prod -aot来构建项目。
  2. 调用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