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 3

1 ответ:

В итоге я выяснил, что это было довольно большим (довольно большим) ограничением webpack. У меня есть идея трясти деревья и т. д. но WebPack действительно должен позволить разработчикам возможность загрузки скрипта во время выполнения.

Теперь я использую этот метод: https://stackoverflow.com/a/37844389/3389346

Это не самое большое, потому что оно требует широкой зависимости приложения от jQuery. Я вернусь и исправлю его, если люди WebPack когда-либо решат разрешить разработчикам возможность одноразовой загрузки скрипта.