我正在开发一个包,我真的需要能够解雇
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是不是设计为通过网络调用?有人有什么建议吗?
答案 0 :(得分:4)
您可以使用Guard执行此类任务。例如,以下是我的Guardfile中的一部分,用于在更改包时自动发布包:
guard :shell do
watch(%r{^workbench/vendor/package/public/.+\..+$}) {
`php artisan asset:publish --bench="vendor/package"`
}
end
你也可以让它自动编译Sass,设置livereload等。看看Jeffrey Way's screencast开始。
答案 1 :(得分:3)
您可以使用带有shell监视命令的Grunt来实现此目的,例如:
$ npm install grunt-shell
在vendor / yourname / yourpackage / Gruntfile.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)将您的资产编译为公共资源,从而更改它们并触发发布后,这自然会起作用。
答案 2 :(得分:0)
这就是我正在做的事情:
<?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);
}
}
}
只要请求来自本地环境,就会自动发布资产,无论捆绑包是否在工作台中。
答案 3 :(得分:0)
编辑/workbench/yourappspace/yourapp/AppServiceProvider.php
<?php namespace YourAppSpace\YourApp;
use Illuminate\Support\ServiceProvider;
use Artisan;
在boot()方法中,
public function boot()
{
$this->package('yourappspace/yourapp');
$app = $this->app;
include __DIR__.'/../../routes.php';
Artisan::call('asset:publish', array('--bench' => 'yourappspace/yourapp'));
}
现在每次更新代码并刷新浏览器时,您的资产都会以Artisan发布。
答案 4 :(得分:0)
还有另一个选项,即添加composer命令。例如,使用install:
将项目部署到服务器时"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize",
"php artisan asset:publish vendor-name/package-name"
],
答案 5 :(得分:0)
BTW 5.1正确方式:
\Artisan::call('vendor:publish', [
'--tag' => ['public'],
'--provider' => 'Some\Your\ServiceProvider',
'--force' => true
]);
答案 6 :(得分:-1)
尝试直接编辑
中的css和js文件{APP_ROOT} /公共/捆绑/ {束} / {CSS | JS}
目录,完成后,只需将修改后的文件复制回bundle的公共目录即可。这可能是错误的方法,但嘿,它的工作原理。另一种选择是创建任务并运行
命令::运行(阵列( 'TASK_NAME'));
官方文档中有一些示例。