0

有谁知道如何将 yeoman deploy 与

不使用 php 前端的 php 框架框架(可能是 laravel)

作为外部域?

我找到了这个生成器-laravel

我想知道您对此案的意见或暗示。谢谢

4

1 回答 1

3

我通过composer安装了“yeo webapp”和Laravel 4。然后我手动将 webapp www 文件夹的内容集成到 Laravel 的结构中。(我现在想知道是否有一种自动化的、可重复的方式来做到这一点,因为它感觉有点单向,但我认为所有 Bower 包仍然是可更新的。我想因为 Yeoman 是一个生成器,所以它是单向的.)。

这些文件从 webapp/www 移动到 Laravel 根文件夹:

.bowerrc     [modified below]
.jshint
bower.json
Gruntfile.js [modified below]
package.json

webapp/www/dist 的 Grunt 构建的内容等价于 Laravel/public 文件夹,因此我们需要一个等价于 webapp/www/app 中的源文件。为此,我创建了一个 Laravel/public-src 文件夹。我修改了构建以从这个 src 文件夹中读取并内置到 Laravel/public 文件夹中。public-src 文件夹包含 webapp 前端源和 Laravel 入口点(index.php、.htaccess)的合并。

注意。构建时 Laravel/public 文件夹将被完全销毁!所以在运行 grunt 之前请注意所有未提交的文件。确保您之前的所有静态资源都已移至 src 文件夹。

.bowerrc 变为:

{
    "directory": "public-src/bower_components"
}

Gruntfile 的变化是:

grunt.initConfig({
    // configurable paths
    yeoman: {
        app: 'public-src',
        dist: 'public'
    },
:

所以这应该允许你将你的 SASS、JS 等构建到 Laravel 公用文件夹中。但是除了静态 HTML 站点之外,这并没有多大用处,你显然不是在构建它,否则我们不会为 Laravel 烦恼。所以我们需要将前端构建的一部分发布到 Laravel 视图子文件夹中。

这是一个简化版本,它只使用 something-view.php 的命名约定来处理所有文件,但我假设您的 Laravel 应用程序将使用主模板(页眉/页脚)结构,因此前端构建应该仅发布外部视图,而不是所有子视图(页面主体或模块)。

home-view.php 这里是 webapp HTML 的 php 化版本,带有您需要的任何 PHP 占位符。

将此构建后发布到 Laravel 视图并支持 PHP 文件而不是 HTML 的 Gruntfile 更改是:

    'bower-install': {
        app: {
            html: '<%= yeoman.app %>/home-view.php',
            ignorePath: '<%= yeoman.app %>/'
        }
    },

...

    useminPrepare: {
        options: {
            dest: '<%= yeoman.dist %>'
        },
        html: '<%= yeoman.app %>/*-view.php'
    },
    usemin: {
        options: {
            assetsDirs: ['<%= yeoman.dist %>']
        },
        html: ['<%= yeoman.dist %>/{,*/}*-view.php'],
        css: ['<%= yeoman.dist %>/styles/{,*/}*.css']
    },

...

    htmlmin: {
        dist: {
            files: [{
                expand: true,
                cwd: '<%= yeoman.app %>',
                src: '*-view.php',
                dest: '<%= yeoman.dist %>'
            }]
        }

...

    // Put files not handled in other tasks here
    copy: {
    ...
        // move the main view(s) into Laravel
        laravel: {
            files: [{
                expand: true,
                dot: true,
                cwd: '<%= yeoman.dist %>',
                dest: 'app/views',
                src: '*-view.php'
            },
            {
                expand: true,
                dot: true,
                cwd: '<%= yeoman.app %>',
                dest: '<%= yeoman.dist %>',
                src: 'index.php'
            }]
        }
    },

...

grunt.registerTask('build', [
...
    'usemin',
    'copy:laravel'
]);

我还向 Laravel/.gitignore 添加了一些构建输出排除项

.tmp
.sass-cache
public/bower_components
public/scripts
public/styles
public-src/bower_components

(尽管我已经阅读过,建议保留已安装软件包的缓存副本,即 public-src/bower_components)。

差不多就是这样,如果我错过了什么,请道歉,但还有更多需要调整的地方。例如,我可能会删除通配符 PHP 发布,支持仅发布页眉/页脚主模板视图,如前所述。其余的内部/正文视图可以来自 Laravel/views 文件夹,不需要为前端目的而构建。

我确实打算分叉我的代码库,删除专有代码并生成一个我可以共享的工作集成的干净基础。在那之前,这就是我所能提供的。我希望它有所帮助。

于 2013-12-12T12:09:27.063 回答