Подтвердить что ты не робот

Почему компоненты bower установлены в wwwroot

Прошло некоторое время с тех пор, как я играл с ASP.NET 5, поэтому для меня было неожиданностью, что компоненты bower теперь по умолчанию помещаются в папку wwwroot\lib. Это происходит из-за файла .bowerrc:

{
    "directory": "wwwroot/lib"
}

В более ранних версиях компоненты bower хранятся в папке ./bower_components, что все еще имеет для меня больше смысла.

Я бы ожидал, что мне понадобится задача gulp/grunt (например, с помощью wiredep) для создания и копирования моих файлов JavaScript и CSS в папку wwwroot.

Ясно, что я что-то упускаю, но я не могу опустить голову или найти подходящую информацию по этому вопросу.

Почему я хочу, чтобы все компоненты bower (включая источники) в папке `wwwroot\lib ', особенно при развертывании, и какой желаемый рабочий процесс при развертывании моего веб-приложения Asp.NET 5?

4b9b3361

Ответ 1

Я думаю, причина, по которой папка bower_components была оставлена ​​и теперь использует wwwroot/lib, заключается в том, что независимо от того, должны ли в dev или production статические файлы жить ниже wwwroot, иначе после каждого редактирования файла вам нужно снова запустить taskrunner, чтобы скопировать файл ниже wwwroot. Это более эффективный рабочий процесс, если обе dev и производственные версии файлов живут где-то ниже wwwroot. таким образом вы можете редактировать и обновлять страницу, а не редактировать runrunner, а затем обновлять страницу.

Я предлагаю сделать файлы процесса grunt в другую папку, например wwwroot/js, при создании мини-обработанных версий ваших файлов.

Тогда папку wwwroot/lib можно даже исключить из публикации, поскольку там будут жить только dev-версии библиотек.

Я думаю, что мои собственные скрипты, которые не являются компонентами bower, вероятно, не должны жить под wwwroot/lib, поэтому, возможно, я поместил unminified в wwwroot/dev и обработал все производственные материалы под wwwroot/js, чтобы в производстве я только разверните папку wwwroot/js, в которой есть мини файлы с производственной версией/комбинированные файлы. Таким образом, в основном мы создаем наши собственные пакеты.

Новые теги среды и тег script позволяют легко указывать на разные местоположения файлов для dev и production, как показано в этом примере:

<environment names="Development">
    <script src="~/lib/jquery-validation/jquery.validate.js"></script>
    <script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
</environment>
<environment names="Staging,Production">
    <script src="//ajax.aspnetcdn.com/ajax/jquery.validation/1.11.1/jquery.validate.min.js"
           asp-fallback-src="~/js/lib/jquery-validation/jquery.validate.js"
           asp-fallback-test="window.jquery && window.jquery.validator">
    </script>
    <script src="//ajax.aspnetcdn.com/ajax/mvc/5.2.3/jquery.validate.unobtrusive.min.js"
           asp-fallback-src="~/js/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"
           asp-fallback-test="window.jquery && window.jquery.validator && window.jquery.validator.unobtrusive">
    </script>
</environment>

Итак, у вас есть простые способы использования cdn в производстве. Обратите внимание, что для файлов non cdn вы не можете указать нигде, кроме wwwroot или какой-либо другой папки ниже, поэтому наличие файлов в папке bower_components вне wwwroot не является местом, где вы можете указывать на скрипты, поэтому нет смысла помещать туда файлы.

При создании script ссылок на dev-версию моих пользовательских скриптов мне нравится использовать новый атрибут taghelper asp-append-version = "true", который добавляет хэш содержимого файла в url, гарантируя, что предыдущий браузер кеш обходит каждый раз, когда файл редактируется или изменяется. И это происходит без необходимости запуска taskrunner, я просто редактирую и обновляю страницу.

Итак, имея в виду, что все скрипты ниже wwwroot - это лучший рабочий процесс, чем использование их в другом месте, и нужно запустить taskrunner для перемещения их после каждого редактирования. Если вы не хотите развертывать все лишние трещины ниже wwwroot/lib, то обрабатывайте то, что вы хотите, в другую папку с taskrunner, так же, как вам нужно было бы, если бы они были вне wwwroot в папке bower_components, поскольку они использовали быть в ранних бета-версиях. И исключить wwwroot/lib из публикации с publishExclude в project.json вашего веб-приложения.

Ответ 2

Они были перемещены туда, потому что Microsoft наблюдала много путаницы со стороны разработчиков .NET, которые не использовались для нового инструментария. Они упростили это для разработчиков .NET, поместив эти компоненты в wwwroot вместо необходимости запускать задачу, чтобы переместить их. Мой источник для этого (и объяснение, чтобы изменить его на предыдущее поведение) происходит от (сотрудника MS) Скотта Ханзельмана сообщения в блоге.