2016-01-31 3 views
2

Я изучаю Yii2 и пытаюсь использовать глоток с ним так, как описано here. Я создал глоток конфиг с следующим содержанием:Yii2 активы и глоток

var gulp = require('gulp'); 
var uglify = require('gulp-uglify'); 
var cssMin = require('gulp-css'); 
var rename = require('gulp-rename'); 
var minimist = require('minimist'); 
var options = minimist(process.argv.slice(2), {string: ['src', 'dist']}); 
var destDir = options.dist.substring(0, options.dist.lastIndexOf("/")); 
var destFile = options.dist.replace(/^.*[\\\/]/, ''); 

// Use `compress-js` task for JavaScript files  
gulp.task('compress-js', function () { 
    return gulp.src(options.src) 
        .pipe(uglify()) 
        .pipe(rename(destFile)) 
        .pipe(gulp.dest(destDir)) 
}); 

// Use `compress-css` task for CSS files 
gulp.task('compress-css', function () { 
    return gulp.src(options.src) 
        .pipe(cssMin()) 
        .pipe(rename(destFile)) 
        .pipe(gulp.dest(destDir)) 
}); 

Я использую этот файл для моей пачки:

<?php 

namespace app\assets; 

use yii\web\AssetBundle; 

class AppAsset extends AssetBundle 
{ 
    public $basePath = '@webroot'; 
    public $baseUrl = '@web'; 
    public $css = [ 
        'css/site.css', 
    ]; 
    public $js = [ 
    ]; 
    public $jsOptions = [ 
        'position' => \yii\web\View::POS_HEAD 
    ]; 
    public $depends = [ 
        'yii\web\YiiAsset', 
        'yii\bootstrap\BootstrapAsset', 
    ]; 
} 

И, в конце концов, я использую этот конфиг для asset команды

<?php 

Yii::setAlias('@webroot', str_replace('\\', '/',  __DIR__) . '/web'); 
Yii::setAlias('@web', '/'); 

return [ 
    'jsCompressor' => 'gulp compress-js --gulpfile gulpfile.js --src {from} --dist {to}', 
    'cssCompressor' => 'gulp compress-css --gulpfile gulpfile.js --src {from} --dist {to}', 
    'bundles' => [ 
        'app\assets\AppAsset' 
    ], 
    'targets' => [ 
        'all' => [ 
            'class' => 'yii\web\AssetBundle', 
            'basePath' => '@webroot/assets', 
            'baseUrl' => '@web/assets', 
            'js' => 'combined-{hash}.js', 
            'css' => 'combined-{hash}.css', 
            'depends' => [ 
            ], 
        ], 
    ], 
    // Asset manager configuration: 
    'assetManager' => [ 
        'basePath' => '@webroot/assets', 
        'baseUrl' => '@web/assets', 
        'linkAssets' => true 
    ], 
]; 

Но , когда я пытаюсь запустить php yii asset assets-config.php config/assets-prod.php объединенные файлы и файл конфигурации config/assets-prod.php сгенерировать, но в каталоге web/assets существует множество символических ссылок (o r прямых копий, если linkAssets === true) файлов и папок, которые сами связаны с связками. Они генерируют по методу publish()AssetManager. Почему Yii не очищает эти папки и файлы после процесса компиляции? Или, может, я что-то не так?

+0

У меня такая же проблема. Создается множество папок (или символических ссылок, если я устанавливаю 'linkAssets => true'), и я не использую его. Вы нашли решение? – Clyff

+0

Я читал много учебников, и я считаю, что современный интерфейс - это своего рода «модули левой панели в терминальном состоянии». Теперь я использую minify без каких-либо современных решений, потому что он делает именно то, что я хочу. Современные решения для малого SPA написаны на macbook в starbucks. Я все еще публикую свои файлы с менеджером активов и чистыми пустыми папками с обратным вызовом afterCopy. Тупой путь, я знаю, но Yii - немой каркас –

ответ

0

Ваши файлы сценариев или css могут зависеть от их источников. Например, вы объединяете файлы css. Один из файлов (из папки «имя_папка» его важная) имеют следующего правило

i.sprite-icons { 
    url(./icons.png) 
} 

юй конкатенация файлы & переместить их в папку «/ assests». Поэтому Yii также изменяет URL-адреса. В результате у вас есть следующее правило css.

i.sprite-icons { 
    url(./foldername/icons.png) 
} 

Yii запускает компрессор только после того, как он объединяет файлы. В вашем случае - глоток.

Смежные вопросы