Angular 4 с Webpack 2, динамическая загрузка скриптов
Я просто балуюсь с Angular 4 с Webpack 2 на проекте.
Я пытаюсь загрузить некоторые скрипты во время ngOnInit и сталкиваюсь с некоторыми проблемами.
Задача 1.)
У меня есть следующий код в моем ngOnInit:
System.import(`../../node_modules/jquery/dist/jquery.js`);
System.import(`../../node_modules/jquery-validation/dist/jquery.validate.js`);
System.import(`../../node_modules/jquery-validation/dist/additional-methods.js`);
System.import(`assets/js/regular-expressions.js`);
Когда я делаю это, все активы, кажется, загружаются, но я получаю ошибку:
Uncaught (in promise): ReferenceError: $ не определен
$ должен быть определен в файле jQuery. Почему это происходит? регулярные выражения.JS файл не знает, что jQuery был загружен?
Задача 2.)
В конечном счете, мне нужно загрузить динамически загружаемые скрипты (поскольку они не нужны на каждой странице).
У меня есть следующий код:
let script = 'assets/js/' + scripts[i].replace(/^/|/$/g, '');
/* The following two lines output the same exact text to the console */
console.log('assets/js/regular-expressions.js');
console.log('' + script + '');
/* The following hard-coded line works (as in the script is loaded, raising the $ issue mentioned above */
System.import('assets/js/regular-expressions.js');
/* The following line with a variable throws an error of "Cannot find module 'assets/js/regular-expressions.js'." */
System.import('' + script + '');
Я не понимаю, почему существует разница в поведении. Особенно если значение передается в систему.импорт точно такой же.1 ответ:
В итоге я выяснил, что это было довольно большим (довольно большим) ограничением webpack. У меня есть идея трясти деревья и т. д. но WebPack действительно должен позволить разработчикам возможность загрузки скрипта во время выполнения.
Теперь я использую этот метод: https://stackoverflow.com/a/37844389/3389346
Это не самое большое, потому что оно требует широкой зависимости приложения от jQuery. Я вернусь и исправлю его, если люди WebPack когда-либо решат разрешить разработчикам возможность одноразовой загрузки скрипта.