/ Align = "left" / js z Angular CLI w środowisku dev
Znalazłem świetny tutorial, który wyjaśnia, jak skonfigurować express.js z Angular CLI, ale w tym tutorialu aplikacja angular jest skompilowana do folderu dist produkcji: https://scotch.io/tutorials/mean-app-with-angular-2-and-the-angular-cli
Jak zintegrować express.js z Angular CLI, ale chcę ekspres.js do pracy z wersją rozwojową aplikacji Angular i chcę, aby nodemon ponownie się uruchomił, jeśli wprowadzę zmiany w express lub angular app.
Spędziłem ponad osiem godzin próbując to uruchomić. Dzięki!
Nie chcę uruchamiać 'ng build' za każdym razem, gdy wprowadzam zmianę w aplikacji Angular (trwa to zbyt długo) - chcę natychmiastowego przeładowania za każdym razem, gdy zapisuję zmianę w mojej aplikacji angular (tak, jakbym uruchamiał 'ng serve') lub express app.
Znalazłem tutorial, w którym podłączasz Angular 2 QuickStart z Expressem, działa, ale szukam Angular CLI.
Rozumiem, że kątowe CLI wykorzystuje WebPack natomiast QuickStart korzysta z systemu.js
7 answers
NOWA ODPOWIEDŹ
Moje doświadczenie 15 godzin nauczyło mnie, że próba serwowania aplikacji kątowej z Express podczas rozwoju nie jest dobrym pomysłem. Właściwym sposobem jest uruchomienie Angular i Express jako dwóch różnych aplikacji na dwóch różnych portach. Angular będzie obsługiwany na porcie 4200 I Express na porcie 3000 jak zwykle. Następnie skonfiguruj serwer proxy dla połączeń API do aplikacji Express.
Dodaj proxy.config.json to root of Angular project:
{
"/api/*":{
"target":"http://localhost:3000",
"secure":false,
"logLevel":"debug"
}
}
Otwórz nową kartę terminal i uruchom to polecenie do uruchomienia aplikacji Express:
nodemon [YOUR_EXPRESS_APP.js] --watch server
(YOUR_EXPRESS_APP.js jest zwykle nazywany server.js lub app.js. serwer jest katalogiem, w którym przechowujesz wszystkie pliki aplikacji Express)
Otwórz drugą kartę terminal i uruchom to polecenie, aby uruchomić aplikację Angular:
ng serve --proxy-config proxy.config.json
Zapewni to przebudowę aplikacji Angular i przeładowanie przeglądarki po zmianie dowolnego pliku aplikacji Angular. Podobnie Serwer Express Server zostanie ponownie uruchomiony po wprowadzeniu zmiany w dowolnej aplikacji Express pliki.
Twoja aplikacja Angular jest tutaj: http://localhost:4200/
Obejrzyj ten film, aby zobaczyć, jak skonfigurować serwer proxy dla połączeń API za pomocą Angular CLI
Uwaga:
Ta konfiguracja dotyczy tylko środowiska programistycznego. W trakcie produkcji będziesz chciał uruchomić ng build
i umieścić aplikację Angular w katalogu dist, który będzie obsługiwany przez Express. W produkcji działa tylko jedna aplikacja-ekspresowa aplikacja obsługująca Twoją aplikację Angular.
Poprzedni ODPOWIEDŹ
Używając wejścia od @echonax wymyśliłem takie rozwiązanie, które jest dość szybkie:
- W tym artykule omówimy, w jaki sposób można uzyskać więcej informacji na ten temat.]}
- Uruchom to w terminalu:
ng build -w & nodemon server.js --watch dist --watch server
Spowoduje to przebudowę aplikacji Angular do folderu dist, a serwer węzła będzie się restartował za każdym razem, gdy to nastąpi. Jednak nie ma automatycznego odświeżania przeglądarki z tą konfiguracją: (
Więcej na ten temat tutaj:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-26 17:01:23
"rozwiązanie etayluz" jest bardzo dobre. Ale chcę dodać dodatkową opcję dla NEW ANSWER , aby nie otwierać dwa razy terminala.
Najpierw musisz zainstalować pakiet ( https://www.npmjs.com/package/concurrently);
npm install concurrently --save
Następnie możesz dodać poniższe kody do swojej paczki.plik json.
"start": "concurrently \"npm run serve-api\" \"npm run serve\"",
"serve": "ng serve --port 3333 --proxy-config proxy.config.json", // You could add --port for changing port
"serve-api": "nodemon [YOUR_EXPRESS_APP.js] --watch server",
npm start
wystarczy do prowadzenia projektu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-17 22:06:03
Używając angular-cli, polecenie ng build
lub ng build --prod
da ci spakowane pliki wraz z index.html
. Upewnij się, że app.js
(node / express) jest skierowany do tego pliku.
Przykład:
app.use( express.static(__dirname + '/src' ) ); //<- it will automatically search for index.html under src folder.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-20 04:51:51
Dłuższe Wyjaśnienie
Spędziłem sporo czasu, zastanawiając się, jak to zrobić we własnym środowisku programistycznym. Najlepsze, co wymyśliłem, to Podwójna implementacja, która łączy wiele rozwiązań echonax, squirrelsareducka i Maxa, ale korzystając z wbudowanych strategii kątowych CLI do oglądania zmian frontend/Angular i używając nodemona do oglądania zmian backend/Express. Krótko mówiąc, w końcu uruchamiasz dwa procesy (ng build i nodemon), aby uzyskać twoje środowisko programistyczne działa, ale automatycznie przebudowuje i uruchamia wszystko pod jednym ekspresowym serwerem WWW.Pierwszym procesem, który będziesz musiał uruchomić będzie zbudowanie folderu Angular dist i obserwowanie wszelkich zmian wprowadzonych do nakładki Angular. Na szczęście dla nas, Angular CLI może to zrobić natywnie (testowane na Angular CLI >= 1.5) za pomocą następującego polecenia:
ng build --watch
Musisz zostawić to uruchomione w tle, ale to będzie obserwować wszelkie zmiany wykonane w kodzie kątowym i odbudować wiązki w locie.
Drugi proces wymaga użycia nodemona do uruchomienia serwera Express i może wymagać nieco więcej konfiguracji i planowania w zależności od tego, jak obszerna jest konfiguracja backendu / Express. Upewnij się tylko, że Express wskazuje na Twój plik indeksu w folderze dist. Dużą zaletą jest to, że możesz dodać to wszystko do pliku Gulpfile za pomocą gulp-nodemon, aby wykonać jeszcze więcej sekwencyjnych zadań po uruchomieniu nodemona, aby obejrzeć backend / Express, takie jak linting backend, Uruchamianie testów równolegle do kompilacji, minifying backend, lub cokolwiek innego, co możesz wymyślić, aby użyć Gulp. Użyj npm lub Yarn aby dodać i zainstalować nodemona do zależności twojego projektu, a następnie uruchom następujący Serwer Express:
nodemon app.js
Zastąp app.js z dowolnym plikiem używanym do budowania Twojego expresowego backendu i powinien teraz odbudowywać się, gdy tylko zostaną wprowadzone zmiany Twój backend.
Tldr;
Uruchom dwa oddzielne procesy w tle, aby uruchomić środowisko programistyczne. Pierwszy bieg:
ng build --watch
Po Drugie, dodaj nodemon do zależności projektu i uruchom następujące polecenie w tle gdzie Aplikacja.js jest zastępowany przez dowolny plik Express:
nodemon app.js
Bonus
Ponieważ zapytałeś, jak automatycznie przeładować przeglądarkę, najlepszym rozwiązaniem będzie skorzystanie z wtyczki przeglądarki o nazwie Wątroba. Ponieważ będziemy już używać nodemona do oglądania naszego backendu, możesz poważnie rozważyć użycie Gulp, jeśli nie masz jeszcze do uruchomienia zarówno nodemon, jak i LiveReload jako dwóch zadań. Najlepszym rozwiązaniem dla wdrożenia LiveReload do Gulp jest użycie wtyczki gulp-refresh, ponieważ jest to zaktualizowana wersja wtyczki gulp-livereload. W końcu znajdziesz coś podobnego do tego:
const defaultAssets = require('./config/assets/default'),
gulp = require('gulp'),
gulpLoadPlugins = require('gulp-load-plugins'),
runSequence = require('run-sequence'),
plugins = gulpLoadPlugins(),
semver = require('semver');
// I store the locations of my backend js files in a config file, so
// that I can call them later on. ie; defaultAssets
gulp.task('nodemon', function () {
// Node.js v7 and newer use different debug argument
const debugArgument = semver.satisfies(process.versions.node, '>=7.0.0') ? '--inspect' : '--debug';
return plugins.nodemon({
script: 'app.js',
nodeArgs: [debugArgument],
ext: 'js,html',
verbose: true,
watch: defaultAssets.server.allJS
});
});
// Watch Files For Changes
gulp.task('watch', function () {
// Start LiveReload
plugins.refresh.listen();
// Watch backend for changes
gulp.watch(defaultAssets.server.allJS).on('change', plugins.refresh.changed);
// Watch frontend dist folder for changes
gulp.watch('./dist').on('change', plugins.refresh.changed);
});
gulp.task('default', function (done) {
runSequence(['nodemon', 'watch'], done);
});
Teraz wystarczy uruchomić gulp polecenie zamiast nodemon app.js aby uruchomić serwer Express.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-12 00:40:42
Też się nad tym zastanawiałem. Kurs Udemy na stosie MEAN autorstwa Maxa Schwarzmüllera zawiera przykładowy kod do integracji Express i Angular. W pakiecie tego przykładowego kodu.plik json, use używa skryptów.zbuduj właściwość, aby dać webpack polecenie, które obserwuje pliki kątowe i odpowiednio aktualizuje. Nie chcę tu kopiować jego kodu, ale o to chodzi. Reszta będzie wymagała odkrycia.
W pliku readme sugeruje uruchomienie npm run build, który uruchamia webpack, a następnie w nowym terminalu uruchamiającym npm start dla serwera węzła. Więc teoretycznie, to uruchamia dwa programy, jak zasugerowałeś w swojej wersji odpowiedzi. Ale robi to bardziej "skryptowy" / predefiniowany sposób uruchamiania procesu Angular build, zamiast nawigować do podkatalogu Angular i wpisywać tam ng build --watch i uruchamiać aplikację Express osobno.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-11 15:28:41
Być może możesz dodać zależność o nazwie 'równocześnie', lub (npm-run-all, parallelshell ).
npm i concurrently --save-dev
Następnie Edytuj pakiet.json like this: `
"scripts": {
"dev": "concurrently \"ng build -w\" \"cross-env NODE_ENV=development node .\" "
}
` to może być praca.
Bibliografia:
przykład: https://stackoverflow.com/a/30950298/7421101 ,
Npm-run-all przykład: https://stackoverflow.com/a/38213212/7421101 ,
Parallelshell przykład: https://stackoverflow.com/a/42373547/7421101 .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-21 10:36:31
A proxy.conf.json
plik w katalogu src o kodzie-
{
"/api/*": {
"target": "http://localhost:3000",
"secure": false,
"logLevel": "debug",
"changeOrigin": true
}
}
I edytując package.json
dodając do niego te 3 wpisy - (zastąp z powrotem.js z Twoim plikiem express, który znajduje się w katalogu głównym projektu Angular)
"scripts": {
"client": "ng serve",
"server": "nodemon back.js",
"start": "npm-run-all -p client server"
}
Teraz uruchomienie npm start
spowoduje uruchomienie zarówno Angular, jak i Express W tym samym czasie w środowisku deweloperskim.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-17 04:49:49