Skip to content

Commit 9efdae7

Browse files
committed
update readme
1 parent 742491c commit 9efdae7

File tree

3 files changed

+111
-82
lines changed

3 files changed

+111
-82
lines changed

README-RO.md

Lines changed: 54 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,119 +1,134 @@
11
# Angular RU Universal Starter
2+
23
[![Angular-RU](https://img.shields.io/badge/Telegram_chat:-Angular_RU-216bc1.svg?style=flat)](https://t.me/angular_ru) [![Angular-RU Universal](https://img.shields.io/badge/Telegram_chat:-Angular_RU_Universal-14b102.svg?style=flat)](https://t.me/angular_universal_ru) [![Angular-RO](https://img.shields.io/badge/Telegram_chat:-Angular_RO-14b102.svg?style=flat)](https://t.me/angular_ro) [![JS-RO](https://img.shields.io/badge/Telegram:-JS_RO-14b102.svg?style=flat)](https://t.me/js_ro) [![Build Status](https://semaphoreci.com/api/v1/angularru/angular-universal-starter/branches/master/badge.svg)](https://semaphoreci.com/angularru/angular-universal-starter)
34

45
> Repozitoriul Angular CLI și Angular Universal
56
67
**Traduceri**:
8+
79
- [Rusă](./README-RU.md)
810
- [Engleză](./README.md)
911
- [Română](./README-RO.md)
1012

1113
**Resurse**:
14+
1215
- chat public rusesc https://t.me/angular_universal_ru
1316
- chat public Angular românesc https://t.me/angular_ro
1417
- https://ssr.angular.su/ - rendering pe server master
1518
- https://csr.angular.su/ - rendering pe client master
1619

17-
# Planuri:
18-
- [x] Angular 7
20+
# Planuri:
21+
22+
- [x] Angular 11
1923
- [x] `document is not defined` și `window is not defined` - [aici](./defined.md)
2024
- [x] [Angular Material2](https://material.angular.io/) **UI componente** - [branch aparte](https://github.com/Angular-RU/angular-universal-starter/tree/material2)
2125
- [x] [Primeng](https://www.primefaces.org/primeng/) **UI компоненты** - [branch aparte](https://github.com/Angular-RU/angular-universal-starter/tree/primeng)
2226
- [x] importăm modulele în dependență de platformă (`MockServerBrowserModule`)
2327
- [x] comunicăm cu api pe server `TransferHttp`
2428
- [x] folosim Cookies pe server `UniversalStorage`
25-
- [x] folosim **[ngx-meta](https://github.com/fulls1z3/ngx-meta)** pentru SEO (*title, meta tags, and Open Graph tags for social sharing*).
29+
- [x] folosim **[ngx-meta](https://github.com/fulls1z3/ngx-meta)** pentru SEO (_title, meta tags, and Open Graph tags for social sharing_).
2630
- [x] folosim ngx-translate pentru i18n
2731
- [x] folosim ORIGIN_URL - pentru drumuri absolute
2832
- [x] @angular/service-worker(`ng add @angular/pwa --project universal-demo`)
2933

3034
## Cum să pornim?
35+
3136
- `yarn` sau `npm install`
3237
- `yarn start` sau `npm run start` - pentru rendering pe client
33-
- `yarn ssr` sau `npm run ssr` - pentru rendering pe server
38+
- `yarn ssr` sau `npm run ssr` - pentru rendering pe server
3439
- `yarn build:universal` sau `npm run build:universal` - pentru production
3540
- `yarn server` sau `npm run server` - pentru a porni serverul
3641
- `yarn build:prerender` sau `npm run build:prerender` - pentru a genera statica pe `static.paths.ts`
3742
- pentru a porni regimul watch, în ssr folosiți `npm run ssr:watch`
3843

3944
## Cum să folosesc repozitoriul în proiectul meu?
45+
4046
Pentru a adăuga ssr în proiectul dumneavoastră e nevoie de următoarele fișiere:
41-
- .angular-cli.json
42-
- server.ts
43-
- prerender.ts
44-
- webpack.config.js
45-
- main.server.ts
46-
- main.browser.ts
47-
- shared/*
48-
- forStorage/*
49-
- environments/*
50-
- app.browser.module.ts
51-
- app.server.module.ts
47+
48+
- .angular-cli.json
49+
- server.ts
50+
- prerender.ts
51+
- webpack.config.js
52+
- main.server.ts
53+
- main.browser.ts
54+
- shared/\*
55+
- forStorage/\*
56+
- environments/\*
57+
- app.browser.module.ts
58+
- app.server.module.ts
5259

5360
## Linkuri
54-
Exemplu oficial în engleză: https://github.com/angular/universal-starter
61+
62+
Exemplu oficial în engleză: https://github.com/angular/universal-starter
5563
Module folosite pentru universal:
64+
5665
- https://github.com/angular/universal/tree/master/modules/aspnetcore-engine - motorul pentru .net core
5766
- https://github.com/angular/universal/tree/master/modules/common - TransferHttpCacheModule
5867
- https://github.com/angular/universal/tree/master/modules/express-engine - Express Engine pentru a porni renderingul pe node, folosim în repozitoriul nostru. Fiți atenți, versiunea acutală nu mai mică de 5.0.0-beta.5
59-
- https://github.com/angular/universal/tree/master/modules/hapi-engine - Hapi Engine un motor alternativă. În exemplu nu folosim, în principui nu-i mare diferența în conectare față de express-engine
68+
- https://github.com/angular/universal/tree/master/modules/hapi-engine - Hapi Engine un motor alternativă. În exemplu nu folosim, în principui nu-i mare diferența în conectare față de express-engine
6069
- https://github.com/angular/universal/tree/master/modules/module-map-ngfactory-loader - modul pentru LazyLoading - e ceva folositor. Fiți atenți, versiunea actuală nu mai mică de 5.0.0-beta.5
6170

6271
## Caracteristici (Important)
63-
- modulul pentru TransferHttp folosește `import { TransferState } from '@angular/platform-browser';` și e nevoie de el pentru a realiza interogările la rest api pe server și pentru a evita dublarea interogărilor (pe client). Uitați-vă la `home.component.ts` (așteptați 3 secunde)
72+
73+
- modulul pentru TransferHttp folosește `import { TransferState } from '@angular/platform-browser';` și e nevoie de el pentru a realiza interogările la rest api pe server și pentru a evita dublarea interogărilor (pe client). Uitați-vă la `home.component.ts` (așteptați 3 secunde)
6474

6575
```ts
66-
this.http.get('https://reqres.in/api/users?delay=3').subscribe(result => {
67-
this.result = result;
76+
this.http.get('https://reqres.in/api/users?delay=3').subscribe((result) => {
77+
this.result = result;
6878
});
6979
```
70-
- `export const AppRoutes = RouterModule.forRoot(routes, { initialNavigation: 'enabled' });` - ca pagina să nu clipească!
7180

72-
- pentru a lucra cu cookie e scris `AppStorage`, care cu ajutorul DI ne permite să facem realizare pentru server și browser. Uitați-vă la `server.storage.ts` și `browser.storage.ts` pentru a vedea realizările. În `server.ts` este
81+
- `export const AppRoutes = RouterModule.forRoot(routes, { initialNavigation: 'enabled' });` - ca pagina să nu clipească!
82+
83+
- pentru a lucra cu cookie e scris `AppStorage`, care cu ajutorul DI ne permite să facem realizare pentru server și browser. Uitați-vă la `server.storage.ts` și `browser.storage.ts` pentru a vedea realizările. În `server.ts` este
84+
7385
```ts
7486
providers: [
75-
{
76-
provide: REQUEST, useValue: (req)
77-
},
78-
{
79-
provide: RESPONSE, useValue: (res)
80-
}
81-
]
87+
{
88+
provide: REQUEST,
89+
useValue: req,
90+
},
91+
{
92+
provide: RESPONSE,
93+
useValue: res,
94+
},
95+
];
8296
```
83-
pentru a lucra cu REQUEST și RESPONSE prin DI - asta-i necesar pentru a lucra cu UniversalStorage când folosim cookies.
8497

85-
- webpack.config.js e scris doar ca să strângă fișierul server.ts și server.js, pentru că angular-cli are o [eroare](https://github.com/angular/angular-cli/issues/7200) la 3d dependențele.
98+
pentru a lucra cu REQUEST și RESPONSE prin DI - asta-i necesar pentru a lucra cu UniversalStorage când folosim cookies.
99+
100+
- webpack.config.js e scris doar ca să strângă fișierul server.ts și server.js, pentru că angular-cli are o [eroare](https://github.com/angular/angular-cli/issues/7200) la 3d dependențele.
86101
- pentru a rezolva o mare parte din probleme se folosește următorul cod `server.ts`
87102

88103
Rezolvarea problemei cu variabilele globale, inclusiv `document is not defined` și `window is not defined`
104+
89105
```ts
90106
const domino = require('domino');
91107
const fs = require('fs');
92108
const path = require('path');
93109
const template = fs.readFileSync(path.join(__dirname, '.', 'dist', 'index.html')).toString();
94110
const win = domino.createWindow(template);
95111
const files = fs.readdirSync(`${process.cwd()}/dist-server`);
96-
const styleFiles = files.filter(file => file.startsWith('styles'));
112+
const styleFiles = files.filter((file) => file.startsWith('styles'));
97113
const hashStyle = styleFiles[0].split('.')[1];
98-
const style = fs.readFileSync(path.join(__dirname, '.', 'dist-server', `styles.${hashStyle}.bundle.css`)).toString();
114+
const style = fs
115+
.readFileSync(path.join(__dirname, '.', 'dist-server', `styles.${hashStyle}.bundle.css`))
116+
.toString();
99117

100118
global['window'] = win;
101119
Object.defineProperty(win.document.body.style, 'transform', {
102120
value: () => {
103121
return {
104122
enumerable: true,
105-
configurable: true
123+
configurable: true,
106124
};
107125
},
108126
});
109127
global['document'] = win.document;
110128
global['CSS'] = style;
111-
// global['XMLHttpRequest'] = require('xmlhttprequest').XMLHttpRequest;
112129
global['Prism'] = null;
113-
114-
```
115-
116-
```ts
130+
``````ts
117131
global['navigator'] = req['headers']['user-agent'];
118132
```
133+
119134
asta ne permite să excludem o parte din problemele apărute cu `undefined`.

README-RU.md

Lines changed: 56 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -5,115 +5,129 @@
55
> Репозиторий с Angular CLI и Angular Universal
66
77
**Переводы**:
8+
89
- [Русский](./README-RU.md)
910
- [English](./README.md)
1011
- [Românesc](./README-RO.md)
1112

1213
**Ресурсы**:
14+
1315
- публичный чат https://t.me/angular_universal_ru
1416
- https://ssr.angular.su/ - серверный рендеринг master
1517
- https://csr.angular.su/ - клиенский рендеринг master
1618

1719
# Планы:
18-
- [x] Angular 7
20+
21+
- [x] Angular 11
1922
- [x] `document is not defined` и `window is not defined` - [тут](./defined.md)
2023
- [x] [Angular Material2](https://material.angular.io/) **UI компоненты** - [отдельная ветка](https://github.com/Angular-RU/angular-universal-starter/tree/material2)
2124
- [x] [Primeng](https://www.primefaces.org/primeng/) **UI компоненты** - [отдельная ветка](https://github.com/Angular-RU/angular-universal-starter/tree/primeng)
2225
- [x] импорт модулей в зависимости от платформы (`MockServerBrowserModule`)
2326
- [x] выполнение запросов к api на сервере `TransferHttp`
2427
- [x] работа с Cookies на сервере `UniversalStorage`
25-
- [x] Uses **[ngx-meta](https://github.com/fulls1z3/ngx-meta)** для SEO (*title, meta tags, and Open Graph tags for social sharing*).
28+
- [x] Uses **[ngx-meta](https://github.com/fulls1z3/ngx-meta)** для SEO (_title, meta tags, and Open Graph tags for social sharing_).
2629
- [x] используется ngx-translate для поддержки интернационализации (i18n)
2730
- [x] используется ORIGIN_URL - для абсолютных запросов
2831
- [x] @angular/service-worker(`ng add @angular/pwa --project universal-demo`)
2932

3033
## Как запустить
34+
3135
- `yarn` или `npm install`
3236
- `yarn start` или `npm run start` - для клиенского рендеринга
33-
- `yarn ssr` или `npm run ssr` - для серверного рендеринга
37+
- `yarn ssr` или `npm run ssr` - для серверного рендеринга
3438
- `yarn build:universal` или `npm run build:universal` - для сборки в релиз
3539
- `yarn server` или `npm run server` - для запуска сервера
3640
- `yarn build:prerender` или `npm run build:prerender` - для генерации статики по `static.paths.ts`
3741
- для запуска отслеживания изменения кода при ssr запустите `npm run ssr:watch`
3842

3943
## Как использовать этот репозиторий в своем проекте:
44+
4045
Для переноса ssr в свой репозиторий вам необходимы файлы:
41-
- .angular-cli.json
42-
- server.ts
43-
- prerender.ts
44-
- webpack.config.js
45-
- main.server.ts
46-
- main.browser.ts
47-
- shared/*
48-
- forStorage/*
49-
- environments/*
50-
- app.browser.module.ts
51-
- app.server.module.ts
46+
47+
- .angular-cli.json
48+
- server.ts
49+
- prerender.ts
50+
- webpack.config.js
51+
- main.server.ts
52+
- main.browser.ts
53+
- shared/\*
54+
- forStorage/\*
55+
- environments/\*
56+
- app.browser.module.ts
57+
- app.server.module.ts
5258

5359
## Ссылки
54-
Официальный пример на анлийиском: https://github.com/angular/universal-starter
60+
61+
Официальный пример на анлийиском: https://github.com/angular/universal-starter
5562
Модули используемые для universal:
63+
5664
- https://github.com/angular/universal/tree/master/modules/aspnetcore-engine -движок для .net core
5765
- https://github.com/angular/universal/tree/master/modules/common - TransferHttpCacheModule для синхронизации запросов сервера и клиента
58-
- https://github.com/angular/universal/tree/master/modules/express-engine - Express Engine для запуска рендеринга в node, в нашем приложении используется. Обратите внимание, что актуальная версия не ниже 5.0.0-beta.5
59-
- https://github.com/angular/universal/tree/master/modules/hapi-engine - Hapi Engine альтернативный движок для рендеринга. В примере не используется, принципиально в схеме подключения не отличается от express-engine
60-
- https://github.com/angular/universal/tree/master/modules/module-map-ngfactory-loader - модуль поиска модулей для LazyLoading - вещь нужная и используемая. Обратите внимание, что актуальная версия не ниже 5.0.0-beta.5
66+
- https://github.com/angular/universal/tree/master/modules/express-engine - Express Engine для запуска рендеринга в node, в нашем приложении используется. Обратите внимание, что актуальная версия не ниже 5.0.0-beta.5
67+
- https://github.com/angular/universal/tree/master/modules/hapi-engine - Hapi Engine альтернативный движок для рендеринга. В примере не используется, принципиально в схеме подключения не отличается от express-engine
68+
- https://github.com/angular/universal/tree/master/modules/module-map-ngfactory-loader - модуль поиска модулей для LazyLoading - вещь нужная и используемая. Обратите внимание, что актуальная версия не ниже 5.0.0-beta.5
6169

6270
## Особенности(Важно)
63-
- модуль для TransferHttp использует `import { TransferState } from '@angular/platform-browser';` и необходим для реализации запроса rest api на сервере и остутствия повторного запроса второй раз. Смотрите `home.component.ts` (задержка 3с)
71+
72+
- модуль для TransferHttp использует `import { TransferState } from '@angular/platform-browser';` и необходим для реализации запроса rest api на сервере и остутствия повторного запроса второй раз. Смотрите `home.component.ts` (задержка 3с)
6473

6574
```ts
66-
this.http.get('https://reqres.in/api/users?delay=3').subscribe(result => {
67-
this.result = result;
75+
this.http.get('https://reqres.in/api/users?delay=3').subscribe((result) => {
76+
this.result = result;
6877
});
6978
```
70-
- `export const AppRoutes = RouterModule.forRoot(routes, { initialNavigation: 'enabled' });` - чтобы не было мигания страницы!
7179

72-
- для работы с куками написан `AppStorage`, который при помощи DI позволяет отдавать разную реализацию для сервера и бразуера. Смотрите `server.storage.ts` и `browser.storage.ts` по реализациям. В `server.ts` есть
80+
- `export const AppRoutes = RouterModule.forRoot(routes, { initialNavigation: 'enabled' });` - чтобы не было мигания страницы!
81+
82+
- для работы с куками написан `AppStorage`, который при помощи DI позволяет отдавать разную реализацию для сервера и бразуера. Смотрите `server.storage.ts` и `browser.storage.ts` по реализациям. В `server.ts` есть
83+
7384
```ts
7485
providers: [
75-
{
76-
provide: REQUEST, useValue: (req)
77-
},
78-
{
79-
provide: RESPONSE, useValue: (res)
80-
}
81-
]
86+
{
87+
provide: REQUEST,
88+
useValue: req,
89+
},
90+
{
91+
provide: RESPONSE,
92+
useValue: res,
93+
},
94+
];
8295
```
83-
для работы с REQUEST и RESPONSE через DI - это необходимо для реализации UniversalStorage при работе с cookies.
8496

85-
- webpack.config.js прописан исключительно для сборки файла server.ts в server.js, так как angular-cli имеет [баг](https://github.com/angular/angular-cli/issues/7200) для работы с 3d зависимостями.
97+
для работы с REQUEST и RESPONSE через DI - это необходимо для реализации UniversalStorage при работе с cookies.
98+
99+
- webpack.config.js прописан исключительно для сборки файла server.ts в server.js, так как angular-cli имеет [баг](https://github.com/angular/angular-cli/issues/7200) для работы с 3d зависимостями.
86100
- для решения части проблем используется следущий код в `server.ts`
87101

88102
Решение проблем глобальных переменных, в том числе `document is not defined` и `window is not defined`
89-
```ts
103+
104+
```````ts
90105
const domino = require('domino');
91106
const fs = require('fs');
92107
const path = require('path');
93108
const template = fs.readFileSync(path.join(__dirname, '.', 'dist', 'index.html')).toString();
94109
const win = domino.createWindow(template);
95110
const files = fs.readdirSync(`${process.cwd()}/dist-server`);
96-
const styleFiles = files.filter(file => file.startsWith('styles'));
111+
const styleFiles = files.filter((file) => file.startsWith('styles'));
97112
const hashStyle = styleFiles[0].split('.')[1];
98-
const style = fs.readFileSync(path.join(__dirname, '.', 'dist-server', `styles.${hashStyle}.bundle.css`)).toString();
113+
const style = fs
114+
.readFileSync(path.join(__dirname, '.', 'dist-server', `styles.${hashStyle}.bundle.css`))
115+
.toString();
99116

100117
global['window'] = win;
101118
Object.defineProperty(win.document.body.style, 'transform', {
102119
value: () => {
103120
return {
104121
enumerable: true,
105-
configurable: true
122+
configurable: true,
106123
};
107124
},
108125
});
109126
global['document'] = win.document;
110127
global['CSS'] = style;
111-
// global['XMLHttpRequest'] = require('xmlhttprequest').XMLHttpRequest;
112128
global['Prism'] = null;
113-
114-
```
115-
116-
```ts
129+
``````ts
117130
global['navigator'] = req['headers']['user-agent'];
118-
```
131+
```````
132+
119133
это позволяет убрать часть проблем при работе с `undefined`.

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ If you like this project please show your support with a GitHub star. Much appre
1717
- https://csr.angular.su/ - client rendering master
1818

1919
# Plans:
20-
- [x] Angular 8
20+
- [x] Angular 11
2121
- [x] `document is not defined` and `window is not defined` - [here](./defined.md)
2222
- [x] [Angular Material2](https://material.angular.io/) **UI components** - [individual branch](https://github.com/Angular-RU/angular-universal-starter/tree/material2)
2323
- [x] [Primeng](https://www.primefaces.org/primeng/) **UI components** - [individual branch] (https://github.com/Angular-RU/angular-universal-starter/tree/primeng)

0 commit comments

Comments
 (0)