Приложение AngularJS 1.7.2, упакованное с Webpack 4, использующее одну точку входа и один выходной комплект js для включения в распределенный html-файл.
Вот как я сейчас использую Webpack.
Это мой файл entry.js:
// angularjs app first initialization
var app = require('./app/app');
// app scripts
require('./app/index')(app);
// screens scripts
require('./screens/index')(app);
// shared scripts
require('./shared/index')(app);
// structure scripts
require('./structure/index')(app);
Что в app
это:
var app = angular.module("myApp", ["ngRoute", "ngSanitize", "angular-loading-bar", "ngAnimate"]);
app.config(function($routeProvider, cfpLoadingBarProvider) {
$routeProvider
.when("/", {
template : require('../screens/auth/login/login.html')
});
cfpLoadingBarProvider.includeSpinner = false;
});
app.directive("app", function($rootScope, $location, Init, AutoRedirect, ObjectManipulation, Defaults) {
return {
template: require('./app.html'),
scope: {},
link: function($scope, element, attrs) {
Init.start().then(function() {
$scope.initialized = true;
$rootScope.initSrc = true;
$rootScope.$digest();
AutoRedirect.fire();
});
}
}
});
module.exports = app;
Как вы видите, я беру экземпляр приложения AngularJSи объединить его через все приложение - у меня есть 4 основных маршрута:
скрипты приложения
экраны скриптов (страниц)
общие сценарии (общие компоненты AngularJS, такие как выпадающий список, кнопка, автозаполнение и т. Д.)..
Каждый маршрут содержит файл index.js, который импортирует необходимые модули, компоненты и экраны соответственно.
Это пример некоторого модуля (контроллер страницы входа)который экспортируется и важен для графа зависимостей:
// screens/auth/login/login.js
module.exports = app => {
require('./components/reset-password/reset-password')(app);
require('./components/request-sms/request-sms')(app);
app.config(($routeProvider, $locationProvider) => {
$routeProvider
.when("/auth/login", {
template : require('./login.html')
});
// $locationProvider.html5Mode(true);
});
app.controller("login", ($rootScope, $scope, $location, $routeParams) => {
$scope.$on("request-sms", (e, info) => {
$scope.phone = info.phone;
$scope.waitingForSms = info.waitingForSms;
$scope.requested = info.requested;
}, true);
});
}
ТеперьКак вы можете видеть, приведенная выше конфигурация Webpack создает один bundle.js, который имеет целое приложение - все его модули, все его директивы (компоненты), все его службы и все его контроллеры и зависимости.
Это генерируется с большим файлом bundle.js, и пользователь загружает его при первом посещении.
Интересно, знает ли Webpack, когда пользователь посещает какое-то первое начальное представление (не html-страницу, представление, так как мыречь идет о SPA), чтобы загрузить пакет или что-то скомпилированный код, который связан только для этого конкретного представления?Конечно, - и базовая сборка SPA.
Я читал о разделении кода на некоторых видео и видел его на Youtube, но у меня нет концепции, и это можно сделать.