Skip to content

Commit b5cc8fd

Browse files
committed
up readme
1 parent d5bfc00 commit b5cc8fd

File tree

1 file changed

+32
-5
lines changed

1 file changed

+32
-5
lines changed

README.md

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,15 @@
3737
- https://github.com/angular/universal/tree/master/modules/hapi-engine - Hapi Engine альтернативный движок для рендеринга. В примере не используется, принципиально в схеме подключения не отличается от express-engine
3838
- https://github.com/angular/universal/tree/master/modules/module-map-ngfactory-loader - модуль поиска модулей для LazyLoading - вещь нужная и используемая. Обратите внимание, что актуальная версия не ниже 5.0.0-beta.5
3939

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

4343
```ts
4444
this.http.get('https://reqres.in/api/users?delay=3').subscribe(result => {
4545
this.result = result;
4646
});
4747
```
48+
- `export const AppRoutes = RouterModule.forRoot(routes, { initialNavigation: 'enabled' });` - чтобы не было мигания страницы!
4849

4950
- для работы с куками написан `AppStorage`, которыйй при помощи DI позволяет отдавать разную реализацию для сервера и бразуера. Смотрите `server.storage.ts` и `browser.storage.ts` по реализациям. В `server.ts` есть
5051
```ts
@@ -61,11 +62,37 @@ providers: [
6162

6263
- webpack.config.js прописан исключительно для сборки файла server.ts в server.js, так как angular-cliт имеет [баг](https://github.com/angular/angular-cli/issues/7200) для работы с 3d зависимостями.
6364
- для решения части проблем используется следущий код в `server.ts`
65+
66+
Решение проблем глобавльных переменных, в том числе `document is not defined` и `window is not defined`
67+
```ts
68+
const domino = require('domino');
69+
const fs = require('fs');
70+
const path = require('path');
71+
const template = fs.readFileSync(path.join(__dirname, '.', 'dist', 'index.html')).toString();
72+
const win = domino.createWindow(template);
73+
const files = fs.readdirSync(`${process.cwd()}/dist-server`);
74+
const styleFiles = files.filter(file => file.startsWith('styles'));
75+
const hashStyle = styleFiles[0].split('.')[1];
76+
const style = fs.readFileSync(path.join(__dirname, '.', 'dist-server', `styles.${hashStyle}.bundle.css`)).toString();
77+
78+
global['window'] = win;
79+
Object.defineProperty(win.document.body.style, 'transform', {
80+
value: () => {
81+
return {
82+
enumerable: true,
83+
configurable: true
84+
};
85+
},
86+
});
87+
global['document'] = win.document;
88+
global['CSS'] = style;
89+
// global['XMLHttpRequest'] = require('xmlhttprequest').XMLHttpRequest;
90+
global['Prism'] = null;
91+
92+
```
93+
6494
```ts
65-
global['window'] = global;
66-
global['document'] = template;
67-
global['navigator'] = req['headers']['user-agent'];
68-
global['CSS'] = null;
95+
global['navigator'] = req['headers']['user-agent'];
6996
```
7097
это позволяет убрать часть проблем при работе с `undefined`.
7198

0 commit comments

Comments
 (0)