yiisoft / yii2-gii

Yii 2 Gii Extension
http://www.yiiframework.com
BSD 3-Clause "New" or "Revised" License
203 stars 192 forks source link

cannot change asset #253

Open yurii-github opened 7 years ago

yurii-github commented 7 years ago

I have removed bower, I want to use custom js etc. I do replace all framework assets in config like

        'assetManager' => [
            //'appendTimestamp' => true,
            'converter' => [
                'class' => 'yii\web\AssetConverter'
            ],
            'class' => 'app\components\AssetManager',
            'linkAssets' => false, //symblic linking
            'basePath' => '@webroot/assets',
            'bundles' => [
              // reset Yii2 
              'yii\web\YiiAsset' => [ 'sourcePath' => null, 'js' => [] ],

but Gii generates error 'the file or directory to be published does not exist: ...vendor/bower-asset/jquery/dist'

If I run in bootstrap this line of code

final class MyLibraryBootstrap implements BootstrapInterface
{
    /**
     * (non-PHPdoc)
     *
     * @see \yii\base\BootstrapInterface::bootstrap()
     * @param $app \yii\web\Application         
     */
    public function bootstrap($app)
    {
      $app->view->registerAssetBundle(\yii\web\JqueryAsset::class);

this error gets fixed. How can I make Gii read my config in first place?

regards

samdark commented 7 years ago

The problem in your case is that YiiAsset depends on another asset called JqueryAsset which you should override in config as well.

yurii-github commented 7 years ago

I didn't copy that part of config, my bad

            'bundles' => [
              // reset Yii2 
              'yii\web\YiiAsset' => [ 'sourcePath' => null, 'js' => [] ],
              'yii\web\JqueryAsset' => [ 'sourcePath' => null, 'js'=> [] ],
              'yii\bootstrap\BootstrapAsset' => [ 'sourcePath' => null,
                'css' => [] // ['https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css'],
              ],
              'yii\bootstrap\BootstrapPluginAsset' => [
                'sourcePath' => null, 'js' => []
                //'js' => ['https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js']
              ],
              'yii\gii\TypeAheadAsset' => [ 'sourcePath' => null ]
            ]
        ],
samdark commented 7 years ago

So that's still a problem with the config above?

yurii-github commented 7 years ago

yes, it was like this before, I just didn't copy whole config. Pushed my code, here it is

config https://github.com/yurii-github/yii2-mylib/blob/category/app/config/config.php app asset https://github.com/yurii-github/yii2-mylib/blob/category/app/assets/App.php (forces load from config in Gii module)

or another way is to force load in bootstrap component https://github.com/yurii-github/yii2-mylib/blob/category/app/components/MyLibraryBootstrap.php

I thought that module should catch main config or not?

regards

kasparsklavins commented 5 years ago

Overwriting global bundles configuration wont work, as gii resets it: https://github.com/yiisoft/yii2-gii/blob/master/src/Module.php#L135

/**
 * Resets potentially incompatible global settings done in app config.
 */
protected function resetGlobalSettings()
{
    if (Yii::$app instanceof \yii\web\Application) {
        Yii::$app->assetManager->bundles = [];
    }
}
esaesa commented 5 years ago

This is also a problem in using npm assets. this my code which produce the same problem.

`$config['bootstrap'][] = 'gii';
$config['modules']['gii'] = [
    'class' => 'yii\gii\Module',
    // uncomment the following to add your IP if you are not connecting from localhost. By default localhost is allowed.
    //'allowedIPs' => ['127.0.0.1', '::1'],
    'components' => [
        'assetManager' => [
            'class' => 'yii\web\AssetManager',
            'linkAssets' => true,
            'forceCopy' => false,
            'appendTimestamp' => true,
            'bundles' => [
                'yii\web\JqueryAsset' => [
                    'sourcePath' => '@npm/jquery/dist',
                    'js' => [
                        YII_ENV_DEV ? 'jquery.js' : 'jquery.min.js'
                    ]
                ],
            ],
            ],
        ],
];

` and i get similar error of The file or directory to be published does not exist: C:\vhosts\kassem.local\project\config/../../vendor/bower-asset/jquery/dist