Angular Seed — установите Bower_components на том же уровне каталога, что и приложение.

Поэтому я недавно использовал angular-seed в задаче по коду в процессе собеседования. Меня оштрафовали за то, что я хранил bower_components в папке приложения.

Вопрос 1. Действительно ли это плохая практика — хранить Bower_components внутри папки приложения?

Получив звон, я решил установить Bower_components на том же уровне, что и папка приложения. Но, конечно, все ссылки в index.html больше не имели смысла, так как ссылки предполагали, что bower_components находятся внутри папки приложения.

Вопрос 2. Как я могу ссылаться на bower_components вне папки приложения? Должно ли это быть частью шага сборки, чтобы скопировать приложение в папку ./public, затем скопировать bower_compnents в ./public/app, затем запустить сервер и указать ему обслуживать статические файлы из ./public/app?

Я модифицировал команду "prestart", чтобы добиться этого, но это чувствовалось неправильным. А еще есть проблема с внесением изменений в папку приложения и необходимостью каждый раз перезапускать сервер, чтобы увидеть мои изменения в браузере.

Какая лучшая практика здесь? Я знаю, что генератор yeoman хранит bower_components вне корня проекта, а задача gulp/grunt исправляет ссылки, но мне нравится angular-seed, потому что он довольно минимален, и я бы хотел просто использовать npm для задач сборки.


person ant    schedule 30.08.2016    source источник
comment
В angular-seed нет ничего, что предполагало бы, что bower_components будут помещены в папку приложения.   -  person vileRaisin    schedule 30.08.2016
comment
Вот что: обратите внимание, что папка bower_components обычно устанавливается в корневую папку, но angular-seed изменяет это местоположение через файл .bowerrc. Помещение его в папку приложения упрощает обслуживание файлов веб-сервером. А это в .bowerrc: { "directory": "app/bower_components" }   -  person ant    schedule 30.08.2016
comment
ах извините, я смотрел на это пару раз и не видел этого.   -  person vileRaisin    schedule 30.08.2016
comment
не волнуйтесь! все здесь учатся. знак равно   -  person ant    schedule 30.08.2016
comment
При этом я не думаю, что есть действительно правильный ответ на ваш вопрос. Все зависит от рабочего процесса, который вы создали сами. Как правило, вы не хотите выставлять на сервер bower_components или что-то подобное, поскольку это может создать возможные векторы атаки. Но то, что вы делаете на стороне клиента, действительно зависит от вас.   -  person vileRaisin    schedule 30.08.2016
comment
Если вы мысленно определили, что Bower_components будет содержать только те зависимости, которые являются частью клиентского приложения, то нет ничего плохого в том, чтобы поместить его в папку /app. Если бы, например, node_modules был размещен там, в конечном итоге может возникнуть неприятность, связанная с необходимостью проходить пути извне приложения или с необходимостью исключать node_modules, когда вы имеете дело только с кодом на стороне клиента внутри приложения.   -  person vileRaisin    schedule 30.08.2016
comment
По сути, это все о вашем рабочем процессе, вам нужно прыгать через всевозможные обручи, чтобы выполнить простые вещи, такие как копирование файлов, ссылки на файлы и т. д.? Чем, возможно, ваша структура не подходит для вашего рабочего процесса   -  person vileRaisin    schedule 30.08.2016
comment
Пример рабочего процесса: давайте предположим, что вы используете bower_components в качестве статического промежуточного программного обеспечения, теперь вам нужно прыгать через обручи локально, чтобы имитировать это поведение на сервере. Таким образом, возникает вопрос, почему бы не создать структуру папок, более идентичную серверной, чем копировать и перемещать файлы, потому что вы выбрали эту структуру папок.   -  person vileRaisin    schedule 30.08.2016
comment
да, я вижу, что ты говоришь. Думаю, я просто немного зациклен на том, почему я получил ошибку в своем испытании кода! Поэтому я просто пытаюсь определить, что является лучшей практикой и как это реализовать.   -  person ant    schedule 30.08.2016
comment
В следующий раз попрошу отзыв. Хорошей практикой является наличие папки /src, которая содержит только ваш код, а корень служит конфигурацией вашего пакета. Так что, возможно, они посчитали, что вы не очень хорошо разделяете задачи, смешивая исходный код с зависимостями. Но это чье-то предположение   -  person vileRaisin    schedule 30.08.2016


Ответы (1)


Лучше всего хранить bower_componentsвне папки приложения, как и node_modules.

Они оба являются менеджерами пакетов. Используйте .bowerrc для установки путей: (документы)

{
  "directory": "public/app/js"
}

bower install поместит все файлы в bower.json в заданный каталог.


В качестве альтернативы, если вы используете grunt, вы можете посмотреть, как yeoman generator-angular использует grunt для минимизации и очистки скриптов Bower/css.

    <!-- build:js(.) scripts/vendor.js -->
    <!-- bower:js -->
    <script src="bower_components/jquery/dist/jquery.js"></script>
    <script src="bower_components/angular/angular.js"></script>
    <script src="bower_components/bootstrap/dist/js/bootstrap.js"></script>
    <script src="bower_components/angular-route/angular-route.js"></script>
    <!-- endbower -->
    <!-- endbuild -->

        <!-- build:js({.tmp,app}) scripts/scripts.js -->
        <script src="/scripts/app.js"></script>
        <script src="/controllers/main.js"></script>
        <!-- endbuild -->

Gruntfile.js выглядит следующим образом (Gruntfile создается при использовании yo angular)

Когда вы используете grunt build, он объединяет ваш index.html, клонирует все в папку dist, и скрипты становятся:

<script src="scripts/vendor.2bed74dc.js"></script>
<script src="scripts/scripts.f9d73ac6.js"></script>
person teachtyler    schedule 30.08.2016
comment
Да, эту часть я понимаю. Но я пытаюсь использовать только npm в качестве средства запуска задач. Я также использую (как часть angular-seed) http-сервер cli, поэтому я не думаю (не уверен на 100%), что у меня есть способ использовать промежуточное программное обеспечение подключения для ссылки на bower_components без изменения кода http-сервера. . Спасибо за ваш ответ, оцените дополнительную уверенность в том, что bower_components должен находиться вне папки приложения. - person ant; 30.08.2016