Почему alias @web пустой и не настраивается?
Вообще все алисы прописываются в конфиге, я так понимаю вы пытаетесь задать алиас во вьюхе.//Yii::setAlias('web',  dirname(dirname(__DIR__)) . '/web');  Если сделать так то вываливается куча    //ошибок 404 (site.css,main.js).
У вас @web уже определен, но вы пытаетесь его переопределить, но по другому пути dirname(dirname(__DIR__)) . '/web' потому Yii больше не находит каталоги css и js, отсюда куча ошибок 404.
Теперь далее. Прочтите внимательно формат $this->registerJs, там первый параметр это код JS. У вас же строка '@web/js/main-index.js', именно потому вы получаете полную ерунду типа <script type="text/javascript">@web/js/main-index.js</script>
Подключение внешний js скриптов осуществляется в файле assets/AppAsset.php
Во вьюхе можно явно подключить ассеты с помощью AppAsset::register($this)
Можно создавать свои собственные классы подключения и регистрировать в представлениях.
Чтобы получить значение @web, вызывайтеecho Yii::getAlias('@web');
Вы явно перепутали 2 метода$this->registerJs
и$this->registerJsFile
Первый регистрирует кусок js кода и ожидает первым параметром получить строку, второй регистрирует файл и ожидает строку с путем к файлу, в том числе заменяет алиасы. Так что первый выводит именно то что должен. Просто смените метод.