自动调用资产:publish--bench=";“供应商/包装”;在Laravel 4的开发过程中

自动调用资产:publish--bench=";“供应商/包装”;在Laravel 4的开发过程中,laravel,laravel-4,Laravel,Laravel 4,我正在制作一个软件包,我真的需要能够启动 php artisan asset:publish --bench="vendor/package" 在开发过程中自动执行命令 每次修改包中的JavaScript或CSS文件时,编写该命令非常耗时 我试着给我的服务提供商Artisan打电话 public function boot() { Artisan::call('asset:publish', array('--bench' => 'arni-gudjonsson/w

我正在制作一个软件包,我真的需要能够启动

php artisan asset:publish --bench="vendor/package"
在开发过程中自动执行命令

每次修改包中的JavaScript或CSS文件时,编写该命令非常耗时

我试着给我的服务提供商Artisan打电话

public function boot()
{       
    Artisan::call('asset:publish', array('--bench' => 'arni-gudjonsson/webber'));
    ...
}
我得到

ErrorException: Runtime Notice: Non-static method Illuminate\Foundation\Artisan::call() should not be called statically, assuming $this from incompatible context

Artisan不是设计用来通过web调用的吗?有人有什么建议吗?

尝试直接在中编辑css和js文件

{app_root}/public/bundles/{bundle}/{css|js}

目录,完成后,只需将修改后的文件复制回捆绑包的公共目录。这可能是错误的方法,但是,嘿,它是有效的。另一个选项是创建任务并运行

命令::run(数组('task_name'))


官方文件中有几个例子

这就是我正在做的:

<?php namespace Vendor\Package;

use \App;
use Illuminate\Filesystem\Filesystem;

class DecoyServiceProvider extends ServiceProvider {
    public function boot() {
        $this->package('bkwld/decoy');

        // Auto-publish the assets when developing locally
        if (App::environment() == 'local' && !App::runningInConsole()) {
            $workbench = realpath(base_path().'/workbench');
            if (strpos(__FILE__, $workbench) === false) App::make('asset.publisher')->publishPackage('vendor/package');
            else App::make('asset.publisher')->publishPackage('vendor/package', $workbench);
        }
    }   
}
您可以用于此类任务。例如,下面是my Guardfile中的一部分,用于在资产发生更改时自动发布包中的资产:

guard:shell-do
监视(%r{^workbench/vendor/package/public/+\..+$}){
`php artisan资产:publish--bench=“供应商/软件包”`
}
结束

您还可以让它自动编译Sass、安装livereload等。开始时请查看。

Edit/workbench/yourappspace/yourapp/AppServiceProvider.php

<?php namespace YourAppSpace\YourApp;

use Illuminate\Support\ServiceProvider;
use Artisan;

现在,每次更新代码和刷新浏览器时,都会使用Artisan发布资产。

您可以使用Grunt和shell watch命令来实现这一点,例如:

$ npm install grunt-shell
在vendor/yourname/yourpackage/grunfile.js中:

    shell: {                           
        assets: {                      
            options: {                 
                stdout: true
            },
            command: 'cd ../../..; php artisan asset:publish yourname/yourpackage'
        },
        views: {                      
            options: {                
                stdout: true
            },
            command: 'cd ../../..; php artisan view:publish yourname/yourpackage;'
        }
    },
    watch: {
        assets: {
            files: ['./public/**/*.js', './public/**/*.css'],
            tasks: ['shell:assets']
        },
        views: {
            files: ['./src/views/**/*.php', './src/views/**/*.md'],
            tasks: ['shell:views']                          
        }
    }

...

grunt.loadNpmTasks('grunt-shell');
grunt.loadNpmTasks('grunt-contrib-watch');

grunt.registerTask('default', ['watch']);
然后启动手表:

$ grunt watch

在其他grunt命令(如less或uglify)将您的资产编译为public后,这一点自然会起作用,从而更改资产并触发发布。

还有一个选项,您可以添加一个composer命令。例如,在使用install将项目部署到服务器时:

"post-install-cmd": [
    "php artisan clear-compiled",
    "php artisan optimize",
    "php artisan asset:publish vendor-name/package-name"
],
顺便说一句,5.1正确方式:


\Artisan::call('供应商:发布'[
'--tag'=>['public'],
“--provider'=>“Some\Your\ServiceProvider”,
'--force'=>true
]);

为了速度和方便,我认为↑ 在终端中重复上一个命令比复制快,或者等于对这些文件发出cp命令。非常好的提示,谢谢!受您的启发,我正在使用这种更通用的方法:guard:shell do watch(%r{^workbench/(.+?)/(.+?)/public})do | path,vendor,package |
php artisan资产:publish--bench=“#{vendor}/#{package}”
end-end
"post-install-cmd": [
    "php artisan clear-compiled",
    "php artisan optimize",
    "php artisan asset:publish vendor-name/package-name"
],