

Denis
26.03.2017
23:22:19
@DenisIzmaylov почему PreJSS и PostJSS это два разных проекта? ?
кажется одни и те же проблемы решают, ну prejss чуть больше
Уже по сути один :) В какой-то момент у нас на секунду было разное видение, но позже мыс Артуром на PreJSS сфокусировались. Он написал крутую штуку https://github.com/lttb/prejss-styles-loader для того, чтобы реализовать основную идею - подключение CSS-файлов в виде CSS-in-JS, используя PreJSS.
На самом деле PreJSS - это платформа плюс экосистема. Ядро состоит из трёх элементров - PreJSS Styles Declaration, парсер CSS (по умолчанию PostCSS) и адаптер (по умолчанию CSS в JSS).
Декларация стилей PreJSS - это как раз тот самый способ задавать стили через Literal Template Strings.
Задача парсера - быстро распарсить блок CSS в JSS-объект.
Задача PreJSS-адаптера - позволить сделать:
1. Препроцессинг CSS для любых, необходимых проекту, кастомизацияй - например, можно, на этом уровне применить конфигурацию приложения или обработать свой кастомный синтаксис.
2. Парсинг CSS в JSS, используя встроенные или любой кастомный парсер (их ведь на самом деле много).
3. Обработать полученные JSS для дальнейшего использования в любой JSS-библиотеки.
Поэтому появились такие инструменты, которые используя PreJSS могут делать любую трансформацию любого CSS в любой CSS-in-JS:
+ prejss-loader для загрузки CSS стилей через webpack
+ prejss-cli для конвертации CSS-файлов в JS с JSS-объектами
+ babel-plugin-transform-prejss для трансформации сборки PreJSS-сигнатур в CSS-in-JS
суть в том, что мне хотелось бы знать, что какой-то StyledComponent предоставляет мне возможность изменять свойство color у кнопки primary, когда она hovered
и не хочется при этом, создавая этот компонент, тратить много времени на это
ну и кажется, что это возможно)
Вот это была бы очень позелная фича! Другой момент, что это сильно зависит от хост-системы рендеринга (конкретный браузер - например, с поддержкой или без поддержки Flex, React Native iOS, React Native Android, React Native Desktop, etc). Но опеделённо в эту сторону стоит поразвиваться - как правильно сделать систему инспекции стилей.


hlomzik
26.03.2017
23:38:45
случайно в дискуссии (https://github.com/facebookincubator/create-react-app/issues/90#issuecomment-234637675) наткнулся на слова Абрамова
... we might want to migrate away from webpack in the future
@DenisIzmaylov я хочу погрузиться в PreJSS, но при первом взгляде мне не понравился boilerplate, много дефолт-кода, нельзя просто взять и подключить как те же styled, например

Google

Alexander
26.03.2017
23:42:32

hlomzik
26.03.2017
23:42:48
о, крутой коммент в той же дискуссии в сторону Абрамова!
I regret bringing this to your attention.

Denis
26.03.2017
23:45:08

hlomzik
26.03.2017
23:45:24

Denis
26.03.2017
23:46:02
А дальше классический JSS API в зависимости от выбранной библиотеки :) Пока самая крутая - jss
Но если это React Native, то даже библиотека не нужна

hlomzik
26.03.2017
23:50:42
возможно, вы имели в виду *прейсс*
Ну я вот не использовал jss, только css-modules, они очень меня устраивали, потому что это чистый сильный css, в котором и @media, и все тебе привычное. Хотел сразу на PreJSS прийти) а там загрузка, подключение, использование, вставка.
..


Artur
26.03.2017
23:58:51
Ну я вот не использовал jss, только css-modules, они очень меня устраивали, потому что это чистый сильный css, в котором и @media, и все тебе привычное. Хотел сразу на PreJSS прийти) а там загрузка, подключение, использование, вставка.
с css-modules самый-самый простой переход - это заменить styles-лоадеры на prejss-styles-loader, а компоненты обернуть в injectSheet из react-jss. и в пропсах ты получишь те же classes, что были при css-modules, грубо говоря
как-то так:
было:
import styles from './styles.css'
const Comp = () => <div className={styles.app} />
export default Comp
__
стало:
import injectSheet from 'react-jss'
import styles from './styles.css'
const Comp = ({ classes }) => <div className={classes.app} />
export default injectSheet(styles)(Comp)


Denis
27.03.2017
00:00:11
Тут единственная проблема - сервер. У нас все приложения изоморфные с полной поддержкой SSR. Мало кто так делает, конечно, но для тех, кто делает - этот подход будет не совсем правильным, посольку нода не умеет работать с CSS семантически. Это можно хакать через require-hook или babel-runtime, но правильней будет сконвертить стили в JS. Для этого мы сделали:
+ https://github.com/axept/prejss-cli

hlomzik
27.03.2017
00:03:11

Google

Denis
27.03.2017
00:03:37
Блин, надо уже обновить доки :)

hlomzik
27.03.2017
00:03:40
что именно делает injectSheet? какое свойство он добавляет?

Artur
27.03.2017
00:03:55

hlomzik
27.03.2017
00:03:56
и как это работает с остальными пропсами?

Artur
27.03.2017
00:04:13
он рендерит стили при маунте компонента, гарантируя таким образом рендер только критикал цсс

hlomzik
27.03.2017
00:04:30

Pavel
27.03.2017
00:05:08
хороший у вас репозиторий Денис
но вот от этой картинки мне стало плохо
я уже не успеваю учить все иконки)

Dream
27.03.2017
00:09:09
техно. зоопарк и инжиниринг ради инжиниринга добро пожаловать в невероятный мир современного фронтенда)

Artur
27.03.2017
00:10:09
благодаря этому инжиринигу мы можем создавать продукты в несколько раз быстрее, чем до него

Dream
27.03.2017
00:11:03
я собстенно не против пока не попрбую критиковать права не имею)

Artur
27.03.2017
00:11:43
ну я не про непосредственно jss, а современный фронтенд)

Dream
27.03.2017
00:11:54
аа, ок)

Artur
27.03.2017
00:12:43
но jss в том числе содействует, ибо стилизация становится еще проще)

Dream
27.03.2017
00:13:08
ну субъективно я бы не сказал
я привык к post css в нем как-то все вкусно и привычно

Artur
27.03.2017
00:14:49

Denis
27.03.2017
00:17:23

Google

hlomzik
27.03.2017
00:18:03
привеееет
Failed to compile.
Error in ./~/prejss/lib/index.js
Module not found: 'prejss-postcss-parser' in ***/node_modules/prejss/lib
@ ./~/prejss/lib/index.js 16:27-59

Denis
27.03.2017
00:18:41
)))
Это при npm install?

hlomzik
27.03.2017
00:19:11
модуль, конечно же, есть
yarn
это в CRA, установил сначала react-jss, потом решил и prejss наконец вставить. инсталл, старт — и вот

Denis
27.03.2017
00:20:07
Блин, мы кажется с Yarn не тестили :)

Artur
27.03.2017
00:20:43
нужно сделать фоллбэк на postjss)))
что-нибудь да сработает

Denis
27.03.2017
00:22:35
Разве у Yarn есть какая-то особенность при установке зависимостей для пакетов?
https://github.com/axept/prejss/blob/master/package.json#L45
Он вот такие не умеет зависимости ставить?

hlomzik
27.03.2017
00:23:39

Denis
27.03.2017
00:23:53
Да, оно
Сейчас подправлю тогда

hlomzik
27.03.2017
00:24:01
люди, которые живут на npm, скажите мне, пожалуйста, КАК ВЫ ТЕРПИТЕ??

Artur
27.03.2017
00:24:14

Vladimir
27.03.2017
00:24:14
вводмшь npm i и идeшь курить

hlomzik
27.03.2017
00:24:36

Google

Alexander
27.03.2017
00:24:55

Vladimir
27.03.2017
00:24:57
Идешь пить
нe, это ужe можeт закончиться нe так радужно
а выглядит как "да"

Admin
ERROR: S client not available

hlomzik
27.03.2017
00:26:28
блин. 10 минут ждать. результат тот же. @DenisIzmaylov

Artur
27.03.2017
00:27:39

hlomzik
27.03.2017
00:27:54
$ ls node_modules/prejss-postcss-parser/
CHANGELOG.md LICENSE README.md package.json
очень смешно

Denis
27.03.2017
00:28:09

hlomzik
27.03.2017
00:28:20

Denis
27.03.2017
00:31:13

hlomzik
27.03.2017
00:31:38

Artur
27.03.2017
00:32:12

Denis
27.03.2017
00:34:15
Проблема в конфиге travis - https://travis-ci.org/axept/prejss-postcss-parser

hlomzik
27.03.2017
00:34:23
Failed to compile.
Error in ./~/deasync/test.js
Module not found: 'child_process' in ***/node_modules/deasync
@ ./~/deasync/test.js 2:9-33
Error in ./~/require-from-string/index.js
Module not found: 'module' in ***/node_modules/require-from-string
@ ./~/require-from-string/index.js 3:13-30

Denis
27.03.2017
00:36:06

hlomzik
27.03.2017
00:37:52
node 7.4.0
почему вообще test.js где-то в сборке используется... и почему не находит child_process... а про module вообще дикость

Denis
27.03.2017
00:39:32

Google

hlomzik
27.03.2017
00:41:15

Denis
27.03.2017
00:42:24
Не лакшери, конечно, но для большинства случаев работает. Для того, чтобы всё было совсем красиво - https://github.com/axept/prejss#performance-matters

hlomzik
27.03.2017
01:33:33
ЧТО ЗА НОЧЬ??? сломался eslint со standard'ом

Denis
27.03.2017
01:38:27
Его мы не трогали :)

hlomzik
27.03.2017
01:46:51
там было что-то странное с версиями и с ярном

Denis
27.03.2017
01:47:07
Так, вроде всё пофиксил по PreJSS? :)
Или что-то ещё осталось?

Дмитрий
27.03.2017
01:57:59

Denis
27.03.2017
01:59:32
Увидел ошибку. Это было на странице basic example?

hlomzik
27.03.2017
02:00:11

Дмитрий
27.03.2017
02:00:12
Не, я в пет проект ставил
Удалил, потому что увиде, что и так обсуждали это выше)