Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Homework 9 #9

Merged
merged 3 commits into from
Dec 3, 2020
Merged

Homework 9 #9

merged 3 commits into from
Dec 3, 2020

Conversation

vtkndrew
Copy link
Owner

@vtkndrew vtkndrew commented Dec 3, 2020

Привет! Вроде бы сделал, чтобы SSR отрабатывал нормально и страница загружалась с норм стилями, но какое-то двоякое чувство в итоге осталось.. Потому что пришлось применять хаки, и постоянно что-то ломалось, что до этого работало отлично =(

Ниже опишу с чем столкнулся и как это решал по мере выполнения этого дз:

  1. Сначала у меня была проблема в том, что использовался node версии 10.*.* (для этой версии почему-то не хотел ставиться hapi) поэтому наконец-то пришлось установить nvm на свой домашний ноут! :D

  2. После обновления ноды почему-то сломалась установленная библиотека node-sass. Выдавалась ошибка: Error: Node Sass does not yet support your current environment:, сначала нашел в гугле такое "решение" проблемы. Но оно только лишь наоборот ещё хуже всё сломало, обновив версию node-sass до последней. В итоге решением этой проблемы стало полностью удалить lock-файл и папку node_modules, вернуть в package.json версию node-sass(на ту, которая была раньше), и на обновленной версии node заново установить все зависимости 🎉

  3. После разделения конфига для клиента и сервера, почему-то у меня стали добавляться автоматически пустые файлы *.d.ts, *.d.ts.map и *.js.map в библиотеку hookrouter, которая лежит в папке node_modules (PS недавно в репозитории hookrouter появился очень похожий issue). И из-за этого у меня не запускалась сборка, выдавая ошибку на эти файлы.. Я посмотрел, что в этих файлах и там был стандартный коммент для sourceMap(//# sourceMappingURL=index.d.ts.map), поэтому решил отключить соурсмапы в tsconfig.json хотя это суперстранно, потому что у меня в том же tsconfig.json в exclude добавлена папка node_modules целиком (или там неверно она туда добавлена?). Когда перестали добавляться новые файлы в библиотеку всё завелось как надо.

  4. Далее у меня при отрисовке в браузере выдавалась ошибка, что не получается корректно выполнить hydrate, потому что есть несоответствие классов на клиенте и сервере.. В чате подглядел подсказку, что это можно решить с помощью exportOnlyLocals: true, но проблема полностью не решилась: теперь страница подгружала стили, но в консоли браузера всё-равно оставался этот warning про hydrate, также плюс к этому появилась странная вещь с *.d.ts-файлами, которую подробнее опишу в следующих предложениях. Стали периодически просто каким то случайным образом при yarn run build:dev генерироваться неверные файлы *.d.ts, то есть там буквально случайно бывает либо всё норм, либо просто пустой интерфейс, либо как будто половина интерфейса вставлена не в начало файла, и в итоге получается просто какой-то сломанный код там х_Х После этого добавил кастомный интерфейс для файлов *.module.scss и тогда удаляя сломанные *.d.ts-файлы перед запуском билда удаётся 1 раз сделать билд норм, и потом уже как повезет какие *.d.ts-файлы сгенерятся, но чаще всего какие-то из них генерятся неверными и если надо будет запустить билд снова, надо их опять находить и удалять руками =/

  5. В итоге для окончательного решения проблемы с варнингом про hydrate пришлось добавить хак в тот компонент, в котором используется хук usePath из hookrouter(у меня это Header). Там теперь локально в компоненте добавляю еще одну переменную path через useState, и обновляю её с помощью useEffect на основе того path, который возвращает usePath... Ниже в комментах к коду это тоже покажу

@vtkndrew vtkndrew self-assigned this Dec 3, 2020
@vtkndrew vtkndrew requested a review from ZarMarathon December 3, 2020 17:20
Comment on lines -11 to +16
const path = usePath();
const path0 = usePath();
const [path, setPath] = useState('');

useEffect(() => {
setPath(path0);
}, [path0]);
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

вот про этот хак я говорю в 5-ом пункте

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ну, на ворнинг гидратации можно и подзабить было, он не всегда истина) но хак тоже норм

Comment on lines +14 to +19
/* хак, который позволяет запустить сборку без
автоматически сгенерированных файлов *.d.ts */
declare module '*.module.scss' {
const classes: { readonly [key: string]: string };
export default classes;
}
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

вот кастомное объявление модуля для файлов *.d.ts, про которое я говорю в 4-ом пункте

@@ -12,7 +12,7 @@
"jsx": "react" /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */,
// "declaration": true, /* Generates corresponding '.d.ts' file. */
// "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
"sourceMap": true /* Generates corresponding '.map' file. */,
"sourceMap": false /* Generates corresponding '.map' file. */,
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

отключил соурмапы из-за того, что описано в 3-ем пункте

@@ -66,5 +66,13 @@
"skipLibCheck": true /* Skip type checking of declaration files. */,
"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
},
"exclude": ["node_modules", "dist", "webpack.config.js", "jest.config.js"]
"exclude": [
"node_modules",
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

вот тут добавлена же вся папка целиком node_modules, но всё-равно автоматически генерировались соурсмапы для файлов библиотеки hookrouter (про это описано в 3-ем пункте).. Или чтобы добавить папку, надо как-то по-другому тут писать?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

тут скорее проблема с самим hookrouter, не знаю как решать, но эта запись корректно игнорирует нод модули)

Comment on lines +21 to +22
test: /\.[tj]sx?$/,
use: ['ts-loader'],
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

подскажи, пожалуйста, почему тут ты в уроке убрал exclude: /node_modules/, для серверного конфига?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

билд под ноду билдит не так, как на клиенте, нода не компилирует себе модули, поэтому это просто бессмысленно)

mode: 'local',
localIdentName: '[name]__[local]__[hash:base64:5]',
auto: /\.module\.\w+$/i,
exportOnlyLocals: true,
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

вот сюда добавил exportOnlyLocals: true, почему – описал в 4-ом пункте

@ZarMarathon
Copy link
Collaborator

вообще билд для сервер сайд рендера приложения, которое было написано и заточено под клиент – всегда больно) это нормально и оно нужно только тогда, когда оно нужно)

Copy link
Collaborator

@ZarMarathon ZarMarathon left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

по дз аппрув

@vtkndrew vtkndrew merged commit 1f7da60 into main Dec 3, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants