ASP.NET MVC, AngularJS, Bower и развертывание структуры папок сайта
Я прочитал много статей и вопросов о структуре папок сайта (разработка и развертывание) и до сих пор не понял, о чем ниже.
Я отметил свою текущую структуру папок:
- Оранжевый - выглядит как lib или поставщик, где я хотел бы хранить независимые компоненты;
- Синяя папка содержит мои собственные, по сравнению с текущими файлами проекта (приложения);
- Готово к использованию готовая к развертыванию папка, содержащая миниатюрные и согласованные файлы, которые раньше включались в index.html.
Есть несколько вопросов, которые я хотел бы найти:
- Правильно ли, что наилучшей практикой является развертывание только на веб-сервере dist?
- Должен ли я конкатрировать файлы bower_components и приложения javascript в одном файле app.min.js? Должен ли я запускать независимые компоненты с файлами приложений и ober-упорядочением?
- Должен ли я развернуть папку views с шаблонами , а в папку dist/views?
- Правильно ли испортить все изображения (изображения css, изображения приложений, изображения плагинов) в одну папку dist/images?
- Правильно ли хранить шаблоны директивы в папке views?
- Существует не относительно файла AngularJS client/app/js/common/helpers.js, - я не могу понять, где наиболее очевидное место для этого (это могут быть прототипы, пользовательские функции или объекты)
Я буду рад за любую помощь, ты.
![введите описание изображения здесь]()
Ответы
Ответ 1
Вот моя структура каталогов для сайта angular, который я создаю, называется Простая команда, которая связана вместе с помощью Browserify.
![введите описание изображения здесь]()
Это мой корневой каталог, где начинается моя инфраструктура, и служит для публичных файлов. Все мои JS и HTML связаны вместе в app.min.js
.
![введите описание изображения здесь]()
Вот как я строю свои директивы как модули с представлениями require()
'd in.
![введите описание изображения здесь]()
"use strict"
require('moment')
require('angular-ui-router')
require('angular-ui-sortable')
require('angular-gravatar')
require('angular-elastic')
require('angular-local-storage')
require('angular-moment')
require('./routes.js')
require('./modules/focusMe')
require('./modules/selectize')
require('./modules/tagData')
require('./modules/www')
require('./modules/uiSrefActiveIf')
angular
.module('simple.team', [
'ngFileUpload',
'ui.router',
'ui.sortable',
'ui.gravatar',
'ui.bootstrap',
'selectize',
'angularMoment',
'angular-loading-bar',
'ng-showdown',
'LocalStorageModule',
'monospaced.elastic',
'textAngular',
'simple.team.uiSrefActiveIf',
'simple.team.routes',
'simple.team.focusMe',
'simple.team.ngBindHtmlUnsafe',
'simple.team.bytes',
'simple.team.strings',
'simple.team.auth',
'simple.team.tagData',
'simple.team.userData',
'simple.team.www'
])
.config(function($urlRouterProvider, cfpLoadingBarProvider) {
$urlRouterProvider.otherwise('/projects')
cfpLoadingBarProvider.includeSpinner = false
})
.controller('AppCtrl', function($state, $http, $rootScope) {
// Controller code
})
Маршруты и контроллеры
angular
.module('simple.team.routes', [])
.config(function($stateProvider) {
$stateProvider
.state('projects', {
url: '/projects',
template: require('./layouts/projects.html'),
controller: ProjectsCtrl,
controllerAs: 'ctrl'
})
.state('projects.card', {
url: '/card/?cardId',
template: require('./layouts/card.html'),
controller: require('./controllers/card.ctrl.js'),
controllerAs: 'ctrl'
})
Ответ 2
Вот моя настройка, которую я использую для нескольких различных предприятий Angular SPA с помощью беседки и gulp.
Моя папка для приложений похожа на вашу, но я также сохраняю там свой шаблон index.html. Gulp использует его и вставляет файлы CSS/JS, которые я хочу (.min файлы, когда я делаю выпуск). Я установил index.html в корень сайта (для отладки).
Я отделяю скрипты bower и app в lib.min.js/app.min.js. Вместо того, чтобы самим минимизировать материал беседки, я просто конкатюю все файлы .min. Я минимизирую и конкатенирую сценарии приложений.
Вместо вашей папки dist я создаю все для выпуска в obj/client (VS автоматически создает папку obj для временных файлов). Я не включаю это в решение (я не хочу его в контроле источника).
У меня нет папки просмотра для выпуска. Используя Gulp, все хранится в кеше шаблона Angular (он добавляется туда с помощью app.min.js). Вы увидите, что они также получают случайную строку в качестве суффикса (для перебора кеша).
В конце концов, мое развертывание состоит только из index.html, app (dist в вашем случае) и bin-папок и web.config. Я исключаю gulpfile, bower.json и т.д.
![введите описание изображения здесь]()
Ответ 3
Извините, мне не хватает времени, чтобы провести какое-то исследование и написать все ответы
Возможно, я отредактирую его позже.
Вопросы 1:
- Правильно ли, что наилучшая практика заключается в развертывании только в папке dist только для веб-сервера?
Ответ, Да
Вот пример структуры каталогов, в которой исходный код (src) отделен от временных предварительно скомпилированных активов (.tmp), которые отделены от конечной папки распространения (dist). Папка src содержит языки более высокого уровня, такие как jade, typescript и scss;.tmp содержит скомпилированные js, css и html файлы; а папка dist содержит только конкатенированные и минитизированные файлы, оптимизированные для обслуживания в.
.
├── .tmp
│ ├── app.css
│ ├── app.js
│ ├── header.html
│ └── index.html
├── bower_components
│ └── angular
├── dist
│ ├── app.min.css
│ ├── app.min.js
│ └── index.html
└── src
├── app.scss
├── app.ts
├── components
├── header.jade
├── index.html
└── shared
Вот ссылка, которую вы можете найти более подробную информацию
Gulp Лучшие практики, которые вы можете использовать сегодня для радикального улучшения своего опыта развития
Ответ 4
Должна использовать папку для каждого типа: http://www.johnpapa.net/angular-app-structuring-guidelines/
Директива script и представление должно быть в одной папке.
Разверните только папку dist
.
Изображения могут быть в dist/assets/images
(или dist/components/images
). В моих проектах у меня есть все директивы, службы и изображения в разделе dist/components
(dist/components/services
, dist/components/partials
[для директив]). И в корне, у меня есть папка для каждого маршрутизатора/раздела (т.е. dist/login
, dist/home
), который включает все соответствующие script, просмотр, тесты.
Если директива или служба используется в нескольких маршрутизаторах/разделах, я помещаю их в dist/components/...
. Если он используется только в одном разделе, я помещаю его прямо под папку для этого маршрута.