На данный момент мне удалось объединить все наши контроллеры/директивы/сервисы в один скрипт, а также объединить все скрипты поставщиков в другой файл скрипта. Теперь мне трудно понять, как правильно загружать файлы шаблонов AngularJS. В настоящее время мы используем Grunt и просто копируем точную структуру папок в папку dist, но очевидно, что это не будет работать в Webpack. Вот пример структуры нашего проекта (из руководства по стилю John Papa)
Мой проект в папке dist в настоящее время отображается следующим образом:
У кого-нибудь есть какие-либо данные?


Шаблоны AngularJS — это html файлы, поэтому вам нужно добавить загрузчик для их обработки.
У вас есть несколько вариантов, объедините эти html файлы в пакет js, используя html-загрузчик, плюсы этого подхода в том, что ваше приложение не будет вызывать ajax для шаблона, минусы, размер вашего пакета js станет большим.
Это позволит вам «требовать» ваш HTML-шаблон внутри ваших контроллеров.
скопируйте эти необработанные файлы, используя копировать-webpack-плагин, таким образом, он будет работать так же, как и с Grunt (указав templateUrl путь к скопированному файлу).
Чтобы быть конкретным в отношении файлов с отложенной загрузкой, вы можете добавить суффикс .lazy.html.
Затем включите загрузчик файлов для файлов .lazy.html и назначьте его templateUrl, а обычное использование один раз с template: require('template.html').
В соответствии с передовой практикой я бы «требовал» критические шаблоны, чтобы они были в комплекте js, и ленивую загрузку (через templateUrl) некритические.
Это пример файла webpack.config.js:
module.exports = {
module: {
rules: [
{
test: /\.lazy\.html$/,
use: [
{
loader: 'file-loader',
options: {},
},
],
},
{
test: /\.html$/,
exclude: /\.lazy\.html$/
use: [
{
loader: 'html-loader',
options: {
minimize: true,
},
},
],
},
],
},
};
// critical.component.js
angular.
module('myApp').
component('greetUser', {
template: require('critical.html'),
controller: function GreetUserController() {
this.user = 'world';
}
});
// none-critical.component.js
angular.
module('myApp').
component('greetUser', {
templateUrl: require('non-critical.lazy.html'),
controller: function GreetUserController() {
this.user = 'world';
}
});
Единственное влияние - это размер пакета, я предлагаю вам смешать оба метода, потому что, если у вас есть, например, модальные окна, есть веская причина для их загрузки во время загрузки приложения, вы можете загрузить его лениво, используя templateUrl
Как именно вы загружаете его с помощью templateUrl? Кажется, это не работает для меня. С шаблоном я делаю: template: require('filename.html')
Добавил пример конфига, надеюсь поможет
AngularJS не является допустимым HTML. Например, <div> {{ 45 < 60 ? 'hello' : 'world' }} </div> не является допустимым HTML, так как между числами есть открытый, но не закрытый <...
<div><</div>, насколько я знаю, является допустимым html... так как он ищет закрывающий тег, а не только чат <
Друзья, я пробую ваше решение, но оно не работает, помещая оператор запроса в свойство шаблона, и использование html-загрузчика не отображает шаблон, когда я перехожу по ссылке, но в консоли не сообщается об ошибке, и я проверил связанный файл js и шаблон в нем существует, я не знаю, как действовать дальше
Спасибо, в итоге мне потребовались шаблоны во всех файлах, как вы предложили. Кажется, сейчас это работает, хотя я не уверен, что это повлияет на производительность.