Ранее я работал с webpack
и использовал webpack-dev-server
с gaearon / Reaction-Hot-Loader, который работал очень хорошо.
Для перезагрузки при изменениях я использовал browser-sync
со следующей командойэто работает.proxy
- это Asp.Net IIS Express:
browser-sync start --files "**/*" --proxy "https://localhost:44349/"
Проблема с этим заключается в том, что он работает только с полной перезагрузкой страницы, и что мне особенно понравилось в реагирующем горячем загрузчике, так это то, что страницане был вынужден перезагружаться полностью, но вместо этого мог перезагружать определенные элементы.
Лучший ресурс, который я нашел до сих пор для достижения того же в Аурелии:
https://github.com/alexisvincent/systemjs-hot-reloader/issues/102#issuecomment-314179277
Согласнок примеру GIF он делает именно то, что я не хотел:
https://github.com/wegorich/aurelia-systemjs-loader/blob/master/assets/images/demo.gif
Настройка:
https://github.com/wegorich/aurelia-sysemjs-hot-plugin
Пример:
https://github.com/wegorich/aurelia-systemjs-loader
Две ошибки:
Вам нужно запустить:
jspm install npm:systemjs-hot-reloader-example
вместо jspm install systemjs-hot-reloader-example
. PR # 114 не был объединен для systemjs-hot-reloader , поэтому необходимо использовать пользовательский systemjs-hot-reloader-example
.
В вашей конфигурации SystemJS вам необходимо добавить"aurelia-path": "npm:aurelia-path@1.1.1"
для "npm:aurelia-hot-module-reload@0.1.0"
.Без этого вы получите 404 для импорта пути.Завершено:
"npm:aurelia-hot-module-reload@0.1.0": {
"aurelia-dependency-injection": "npm:aurelia-dependency-injection@1.4.1",
"aurelia-loader": "npm:aurelia-loader@1.0.0",
"aurelia-metadata": "npm:aurelia-metadata@1.0.4",
"aurelia-pal": "npm:aurelia-pal@1.8.0",
"aurelia-templating": "npm:aurelia-templating@1.10.0",
"aurelia-path": "npm:aurelia-path@1.1.1"
},
Однако при запуске кода я получаю следующую ошибку:
The systemjs-hmr polyfill must be loading after SystemJS has loaded
Скрипты загружаются так:
<script src="~/Scripts/system.js"></script>
<script src="~/src/config.js?nocache=@DateTime.Now.Ticks"></script>
<script>
System.import('aurelia-loader-systemjs');
Promise.all([
System.import('aurelia-systemjs-hot-plugin'),
System.import('systemjs-hot-reloader-example')
]).then(([fileChanged, connect]) => {
connect({
host: '//localhost:3000', fileChanged
});
System.import('aurelia-bootstrapper');
});
</script>
Если я загружаюsystem.js
после System.import('aurelia-loader-systemjs');
Я получаю ошибку Uncaught ReferenceError: System is not defined
.
Глядя на код, который генерирует ошибку, выглядит следующее:
if (!System && !!SystemJS) console.warn('The systemjs-hmr polyfill must be loading after SystemJS has loaded');
При взгляде на код System
не определено и SystemJS
установлено.Однако импорт выполняется из System.import
Я могу написать либо SystemJS.import('aurelia-loader-systemjs');
или System.import('aurelia-loader-systemjs');
.Я получаю тот же результат.
https://github.com/systemjs/systemjs/issues/1351
Почему System
undefined
при запуске импорта?
Версии:
- JSPM 0.16.53
- SystemJS v0.19.27
- Aurelia 1.0.6
Я также посмотрел на собственную горячую перезагрузку модуля Aurelias, но для этого требуется Webpack, который мы не делаемт использовать.
https://github.com/aurelia/hot-module-reload
https://aurelia.io/blog/2016/12/08/big-aurelia-release-update/