Правильный способ загрузки шаблонов AngularJS для Webpack 4?

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

Правильный способ загрузки шаблонов AngularJS для Webpack 4?

Мой проект в папке dist в настоящее время отображается следующим образом:

Правильный способ загрузки шаблонов AngularJS для Webpack 4?

У кого-нибудь есть какие-либо данные?

Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Знаете ли вы, что директивы являются одной из самых мощных и универсальных функций Angular?
Директивы позволяют расширять HTML новыми элементами и атрибутами и даже создавать собственные структурные директивы для манипулирования DOM. С...
Разница между Angular и React
Разница между Angular и React
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые...
4
0
3 548
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Шаблоны AngularJS — это html файлы, поэтому вам нужно добавить загрузчик для их обработки.

  1. У вас есть несколько вариантов, объедините эти html файлы в пакет js, используя html-загрузчик, плюсы этого подхода в том, что ваше приложение не будет вызывать ajax для шаблона, минусы, размер вашего пакета js станет большим. Это позволит вам «требовать» ваш HTML-шаблон внутри ваших контроллеров.

  2. скопируйте эти необработанные файлы, используя копировать-webpack-плагин, таким образом, он будет работать так же, как и с Grunt (указав templateUrl путь к скопированному файлу).

  3. Чтобы быть конкретным в отношении файлов с отложенной загрузкой, вы можете добавить суффикс .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';
    }
  });

Спасибо, в итоге мне потребовались шаблоны во всех файлах, как вы предложили. Кажется, сейчас это работает, хотя я не уверен, что это повлияет на производительность.

Jack Johnson 14.07.2019 18:41

Единственное влияние - это размер пакета, я предлагаю вам смешать оба метода, потому что, если у вас есть, например, модальные окна, есть веская причина для их загрузки во время загрузки приложения, вы можете загрузить его лениво, используя templateUrl

felixmosh 14.07.2019 19:02

Как именно вы загружаете его с помощью templateUrl? Кажется, это не работает для меня. С шаблоном я делаю: template: require('filename.html')

Jack Johnson 14.07.2019 23:03

Добавил пример конфига, надеюсь поможет

felixmosh 15.07.2019 06:35

AngularJS не является допустимым HTML. Например, <div> {{ 45 < 60 ? 'hello' : 'world' }} </div> не является допустимым HTML, так как между числами есть открытый, но не закрытый <...

alessandro308 02.03.2021 17:25

<div><</div>, насколько я знаю, является допустимым html... так как он ищет закрывающий тег, а не только чат <

felixmosh 02.03.2021 17:34

Друзья, я пробую ваше решение, но оно не работает, помещая оператор запроса в свойство шаблона, и использование html-загрузчика не отображает шаблон, когда я перехожу по ссылке, но в консоли не сообщается об ошибке, и я проверил связанный файл js и шаблон в нем существует, я не знаю, как действовать дальше

George 14.06.2021 16:57

Другие вопросы по теме