Skip to content

Commit 144333d

Browse files
committed
merge master
2 parents 0e07eaa + 1d41210 commit 144333d

File tree

307 files changed

+22914
-12799
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

307 files changed

+22914
-12799
lines changed

.angular-cli.json

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
"project": {
44
"name": "universal-demo"
55
},
6-
"apps": [{
6+
"apps": [
7+
{
78
"root": "src",
89
"outDir": "dist",
910
"assets": [
1011
"assets",
1112
"favicon.ico",
12-
"robots.txt"
13+
"robots.txt",
14+
"manifest.json"
1315
],
1416
"index": "index.html",
1517
"main": "main.browser.ts",
@@ -26,7 +28,8 @@
2628
"environments": {
2729
"dev": "environments/browser/environment.ts",
2830
"prod": "environments/browser/environment.prod.ts"
29-
}
31+
},
32+
"serviceWorker": false
3033
},
3134
{
3235
"platform": "server",
@@ -35,7 +38,8 @@
3538
"assets": [
3639
"assets",
3740
"favicon.ico",
38-
"robots.txt"
41+
"robots.txt",
42+
"manifest.json"
3943
],
4044
"index": "index.html",
4145
"main": "main.server.ts",
@@ -59,7 +63,8 @@
5963
"config": "./protractor.conf.js"
6064
}
6165
},
62-
"lint": [{
66+
"lint": [
67+
{
6368
"project": "src/tsconfig.app.json",
6469
"exclude": "**/node_modules/**"
6570
},

.gitignore

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1+
.idea
12
dist-server
23
node_modules
34
dist
5+
yarn-error.log
46
server.js
5-
package-lock.json
6-
yarn.lock
77
prerender.js
88
prerender.js
99
.DS_Store

.vscode/launch.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
// Use IntelliSense to learn about possible attributes.
3+
// Hover to view descriptions of existing attributes.
4+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5+
"version": "0.2.0",
6+
"configurations": [
7+
{
8+
"type": "node",
9+
"request": "launch",
10+
"name": "Launch Program",
11+
"program": "${workspaceFolder}/serve"
12+
}
13+
]
14+
}

README-RO.md

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
# Angular RU Universal Starter [![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)
2+
3+
[![Build Status](https://semaphoreci.com/api/v1/angularru/angular-universal-starter/branches/master/badge.svg)](https://semaphoreci.com/angularru/angular-universal-starter)
4+
5+
> Repozitoriul Angular CLI și Angular Universal
6+
7+
**Traduceri**:
8+
- [Rusă](./README-RU.md)
9+
- [Engleză](./README.md)
10+
- [Românesc](./README-RO.md)
11+
12+
**Resurse**:
13+
- chat public https://t.me/angular_universal_ru
14+
- http://master-ssr.gorniv.com/ - rendering pe server master
15+
- http://master-csr.gorniv.com/ - rendering pe client master
16+
17+
# Planuri:
18+
- [x] Angular 5
19+
- [x] `document is not defined` și `window is not defined` - [aici](./defined.md)
20+
- [x] [Angular Material2](https://material.angular.io/) **UI componente** - [branch aparte](https://github.com/Angular-RU/angular-universal-starter/tree/material2)
21+
- [x] [Primeng](https://www.primefaces.org/primeng/) **UI компоненты** - [branch aparte](https://github.com/Angular-RU/angular-universal-starter/tree/primeng)
22+
- [x] importăm modulele în dependență de platformă (`MockServerBrowserModule`)
23+
- [x] comunicăm cu api pe server `TransferHttp`
24+
- [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*).
26+
- [x] folosim ngx-translate pentru i18n
27+
- [x] folosim ORIGIN_URL - pentru drumuri absolute
28+
- [ ] @angular/service-worker
29+
- [ ] Ionic - e nevoie să creăm versiunea web, până când avem probleme [branch aparte](https://github.com/Angular-RU/angular-universal-starter/tree/ionic)
30+
31+
## Cum să pornim?
32+
- `yarn` sau `npm install`
33+
- `yarn start` sau `npm run start` - pentru rendering pe client
34+
- `yarn ssr` sau `npm run ssr` - pentru rendering pe server
35+
- `yarn build:universal` sau `npm run build:universal` - pentru production
36+
- `yarn server` sau `npm run server` - pentru a porni serverul
37+
- `yarn build:prerender` sau `npm run build:prerender` - pentru a genera statica pe `static.paths.ts`
38+
- cum pornim watch: odată: `yarn ssr:cw` sau `npm run ssr:cw`, odată: `yarn ssr:sw` sau `npm run ssr:sw`, după fiecare modificare: `yarn ssr:server` sau `npm run ssr:server`
39+
40+
## Cum să folosesc repozitoriul în proiectul meu?
41+
Pentru a adăuga ssr în proiectul dumneavoastră e nevoie de următoarele fișiere:
42+
- .angular-cli.json
43+
- server.ts
44+
- prerender.ts
45+
- webpack.config.js
46+
- main.server.ts
47+
- main.browser.ts
48+
- modules/*
49+
- forStorage/*
50+
- environments/*
51+
- app.browser.module.ts
52+
- app.server.module.ts
53+
54+
## Linkuri
55+
Exemplu oficial în engleză: https://github.com/angular/universal-starter
56+
Module folosite pentru universal:
57+
- https://github.com/angular/universal/tree/master/modules/aspnetcore-engine - motorul pentru .net core
58+
- https://github.com/angular/universal/tree/master/modules/common - TransferHttpCacheModule, la acest moment nu-l folosesc, dar dacă știți pentru ce și unde se poate de-l pus - deschideți o issue sau pull request
59+
- 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
60+
- 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
61+
- 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
62+
63+
## Caracteristici (Important)
64+
- 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)
65+
66+
```ts
67+
this.http.get('https://reqres.in/api/users?delay=3').subscribe(result => {
68+
this.result = result;
69+
});
70+
```
71+
- `export const AppRoutes = RouterModule.forRoot(routes, { initialNavigation: 'enabled' });` - ca pagina să nu clipească!
72+
73+
- 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
74+
```ts
75+
providers: [
76+
{
77+
provide: REQUEST, useValue: (req)
78+
},
79+
{
80+
provide: RESPONSE, useValue: (res)
81+
}
82+
]
83+
```
84+
pentru a lucra cu REQUEST și RESPONSE prin DI - asta-i necesar pentru a lucra cu UniversalStorage când folosim cookies.
85+
86+
- 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.
87+
- pentru a rezolva o mare parte din probleme se folosește următorul cod `server.ts`
88+
89+
Rezolvarea problemei cu variabilele globale, inclusiv `document is not defined` și `window is not defined`
90+
```ts
91+
const domino = require('domino');
92+
const fs = require('fs');
93+
const path = require('path');
94+
const template = fs.readFileSync(path.join(__dirname, '.', 'dist', 'index.html')).toString();
95+
const win = domino.createWindow(template);
96+
const files = fs.readdirSync(`${process.cwd()}/dist-server`);
97+
const styleFiles = files.filter(file => file.startsWith('styles'));
98+
const hashStyle = styleFiles[0].split('.')[1];
99+
const style = fs.readFileSync(path.join(__dirname, '.', 'dist-server', `styles.${hashStyle}.bundle.css`)).toString();
100+
101+
global['window'] = win;
102+
Object.defineProperty(win.document.body.style, 'transform', {
103+
value: () => {
104+
return {
105+
enumerable: true,
106+
configurable: true
107+
};
108+
},
109+
});
110+
global['document'] = win.document;
111+
global['CSS'] = style;
112+
// global['XMLHttpRequest'] = require('xmlhttprequest').XMLHttpRequest;
113+
global['Prism'] = null;
114+
115+
```
116+
117+
```ts
118+
global['navigator'] = req['headers']['user-agent'];
119+
```
120+
asta ne permite să excludem o parte din problemele apărute cu `undefined`.

README-RU.md

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
# Angular RU Universal Starter [![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)
2+
3+
[![Build Status](https://semaphoreci.com/api/v1/angularru/angular-universal-starter/branches/master/badge.svg)](https://semaphoreci.com/angularru/angular-universal-starter)
4+
5+
> Репозиторий с Angular CLI и Angular Universal
6+
7+
**Переводы**:
8+
- [Русский](./README-RU.md)
9+
- [English](./README.md)
10+
- [Românesc](./README-RO.md)
11+
12+
**Ресурсы**:
13+
- публичный чат https://t.me/angular_universal_ru
14+
- http://master-ssr.gorniv.com/ - серверный рендеринг master
15+
- http://master-csr.gorniv.com/ - клиенский рендеринг master
16+
17+
# Планы:
18+
- [x] Angular 5
19+
- [x] `document is not defined` и `window is not defined` - [тут](./defined.md)
20+
- [x] [Angular Material2](https://material.angular.io/) **UI компоненты** - [отдельная ветка](https://github.com/Angular-RU/angular-universal-starter/tree/material2)
21+
- [x] [Primeng](https://www.primefaces.org/primeng/) **UI компоненты** - [отдельная ветка](https://github.com/Angular-RU/angular-universal-starter/tree/primeng)
22+
- [x] импорт модулей в зависимости от платформы (`MockServerBrowserModule`)
23+
- [x] выполнение запросов к api на сервере `TransferHttp`
24+
- [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*).
26+
- [x] используется ngx-translate для поддержки интернационализации (i18n)
27+
- [x] используется ORIGIN_URL - для абсолютных запросов
28+
- [ ] @angular/service-worker
29+
- [ ] Ionic - необходимо собрать веб версию, пока есть проблемы [отдельная ветка](https://github.com/Angular-RU/angular-universal-starter/tree/ionic)
30+
31+
## Как запустить
32+
- `yarn` или `npm install`
33+
- `yarn start` или `npm run start` - для клиенского рендеринга
34+
- `yarn ssr` или `npm run ssr` - для серверного рендеринга
35+
- `yarn build:universal` или `npm run build:universal` - для сборки в релиз
36+
- `yarn server` или `npm run server` - для запуска сервера
37+
- `yarn build:prerender` или `npm run build:prerender` - для генерации статики по `static.paths.ts`
38+
- как запустить watch: один раз: `yarn ssr:cw` или `npm run ssr:cw`, один раз: `yarn ssr:sw` или `npm run ssr:sw`, после каждого изменения: `yarn ssr:server` или `npm run ssr:server`
39+
40+
## Как использовать этот репозиторий в своем проекте:
41+
Для переноса ssr в свой репозиторий вам необходимы файлы:
42+
- .angular-cli.json
43+
- server.ts
44+
- prerender.ts
45+
- webpack.config.js
46+
- main.server.ts
47+
- main.browser.ts
48+
- modules/*
49+
- forStorage/*
50+
- environments/*
51+
- app.browser.module.ts
52+
- app.server.module.ts
53+
54+
## Ссылки
55+
Официальный пример на анлийиском: https://github.com/angular/universal-starter
56+
Модули используемые для universal:
57+
- https://github.com/angular/universal/tree/master/modules/aspnetcore-engine -движок для .net core
58+
- https://github.com/angular/universal/tree/master/modules/common - TransferHttpCacheModule, на данный момент мной не используется, если знаете куда и зачем его встаить - напишите мне или в issue, pull request
59+
- https://github.com/angular/universal/tree/master/modules/express-engine - Express Engine для запуска рендеринга в node, в нашем приложении используется. Обратите внимание, что актуальная версия не ниже 5.0.0-beta.5
60+
- https://github.com/angular/universal/tree/master/modules/hapi-engine - Hapi Engine альтернативный движок для рендеринга. В примере не используется, принципиально в схеме подключения не отличается от express-engine
61+
- https://github.com/angular/universal/tree/master/modules/module-map-ngfactory-loader - модуль поиска модулей для LazyLoading - вещь нужная и используемая. Обратите внимание, что актуальная версия не ниже 5.0.0-beta.5
62+
63+
## Особенности(Важно)
64+
- модуль для TransferHttp использует `import { TransferState } from '@angular/platform-browser';` и необходим для реализации запроса rest api на сервере и остутствия повторного запроса второй раз. Смотрите `home.component.ts` (задержка 3с)
65+
66+
```ts
67+
this.http.get('https://reqres.in/api/users?delay=3').subscribe(result => {
68+
this.result = result;
69+
});
70+
```
71+
- `export const AppRoutes = RouterModule.forRoot(routes, { initialNavigation: 'enabled' });` - чтобы не было мигания страницы!
72+
73+
- для работы с куками написан `AppStorage`, которыйй при помощи DI позволяет отдавать разную реализацию для сервера и бразуера. Смотрите `server.storage.ts` и `browser.storage.ts` по реализациям. В `server.ts` есть
74+
```ts
75+
providers: [
76+
{
77+
provide: REQUEST, useValue: (req)
78+
},
79+
{
80+
provide: RESPONSE, useValue: (res)
81+
}
82+
]
83+
```
84+
для работы с REQUEST и RESPONSE через DI - это необходимо для реализации UniversalStorage при работе с cookies.
85+
86+
- webpack.config.js прописан исключительно для сборки файла server.ts в server.js, так как angular-cli имеет [баг](https://github.com/angular/angular-cli/issues/7200) для работы с 3d зависимостями.
87+
- для решения части проблем используется следущий код в `server.ts`
88+
89+
Решение проблем глобавльных переменных, в том числе `document is not defined` и `window is not defined`
90+
```ts
91+
const domino = require('domino');
92+
const fs = require('fs');
93+
const path = require('path');
94+
const template = fs.readFileSync(path.join(__dirname, '.', 'dist', 'index.html')).toString();
95+
const win = domino.createWindow(template);
96+
const files = fs.readdirSync(`${process.cwd()}/dist-server`);
97+
const styleFiles = files.filter(file => file.startsWith('styles'));
98+
const hashStyle = styleFiles[0].split('.')[1];
99+
const style = fs.readFileSync(path.join(__dirname, '.', 'dist-server', `styles.${hashStyle}.bundle.css`)).toString();
100+
101+
global['window'] = win;
102+
Object.defineProperty(win.document.body.style, 'transform', {
103+
value: () => {
104+
return {
105+
enumerable: true,
106+
configurable: true
107+
};
108+
},
109+
});
110+
global['document'] = win.document;
111+
global['CSS'] = style;
112+
// global['XMLHttpRequest'] = require('xmlhttprequest').XMLHttpRequest;
113+
global['Prism'] = null;
114+
115+
```
116+
117+
```ts
118+
global['navigator'] = req['headers']['user-agent'];
119+
```
120+
это позволяет убрать часть проблем при работе с `undefined`.

README.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
# Angular Universal starter kit
2-
[![Build Status](https://semaphoreci.com/api/v1/angularru/angular-universal-starter/branches/master/badge.svg)](https://semaphoreci.com/angularru/angular-universal-starter)
1+
# Angular RU Universal Starter [![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)
32

4-
Репозиторий с Angular CLI и Angular Universal
3+
[![Build Status](https://semaphoreci.com/api/v1/angularru/angular-universal-starter/branches/master/badge.svg)](https://semaphoreci.com/angularru/angular-universal-starter)
54

6-
- публичный чат https://t.me/angular_universal_ru
5+
> Repository with Angular CLI and Angular Universal
76
87
- http://material2-ssr.gorniv.com/ - серверный рендеринг material2
98

0 commit comments

Comments
 (0)