自动调用资产: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"
],