Насобирал себе веберов...
1.02K subscribers
17 photos
3 videos
38 links
Download Telegram
Astro 4.0

- Тулбар для отладки в браузере
- Интернационализации (i18n) теперь поддерживается в роутинге
- Поддержка View Transition API
- Переработан вывод ошибок
- Документация переехала на Starlight

В ближайшее время, сделаю пост про стак разработки, в составе которого, как раз будет Astro, на этом примере покажу какие есть фишки и особенности у данной платформы, а для начала нужно будет обновиться 😎
Please open Telegram to view this post
VIEW IN TELEGRAM
Насобирал себе веберов...
Solid.js в массы 🔥 Я эти мысли про Solid хотел написать еще раньше, но тут мне приглянулся интересный видос, сравнивающий концепцию React с Solid, также меня в последнее время сильно напрягает развитие React в сторону гибридных компонентов (RSC) и отказ от…
Тут оказывается вышла вторая бета фреймворка SolidStart 🎉

Очень сильно жду стабильного релиза, чтобы слезть с иглы Next.js, причина этому, как ни странно - React!

Пройдемся по технической части:
- Под капотом Nitro (авторы unjs, кто не понял) на котором работает Nuxt, и Vinxi. Всё это добро можно будет настраивать 😎
import { defineConfig } from "@solidjs/start/config";

export default defineConfig({
start: {
server: {
/* NITRO SETTINGS */
}
}
});


- Агностик роутер/метадата библиотеки будут работать в Solid/SolidStart, замечательное изменение для разработчиков библиотек, которые будут использовать эти зависимости в своих проектах (э - экосистема).

- Клиентский рендеринг, как и у других, через динамический импорт, тут ничего нового.
import { clientOnly } from "@solidjs/start"

const BigDataGrid = clientOnly(() => import("../BigDataGrid"));

function IsomorphicComp() {
return <BigDataGrid />
}


- Поддержка серверных функций. "use client" 🤡
async function callMeAnywhere(id: number) {
"use server";
const res = await db.findSomething({ where: { id } });
return res.data;
}


- Провели рефакторинг кодовой базы, значительно сократив количество строк кода с более чем 10 тысяч до примерно 1400 в 32 файлах вместо исходных 150.

Всех с наступающим новым годом, надеюсь не последний пост в этом году. ☕️

https://github.com/solidjs/solid-start/releases/tag/v0.4.0
Please open Telegram to view this post
VIEW IN TELEGRAM
Подборка TypeScript расширений для VS Code

Расширение для просмотра типов, представленные в виде иерархической структуры, с возможностью быстрого поиска и навигации: https://marketplace.visualstudio.com/items?itemName=mxsdev.typescript-explorer

Красиво выводит TS ошибки: https://marketplace.visualstudio.com/items?itemName=yoavbls.pretty-ts-errors

Новое расширение в моем арсенале, позволяет посмотреть тип в развернутом виде: https://marketplace.visualstudio.com/items?itemName=MylesMurphy.prettify-ts
Без расширения можно использовать лайфхак (вложенность не будет видно):
type A = { a: string }
type B = { b: string }
type C = A & B // A & B

type UnwrapType<T> = Omit<T, never>
type U = UnwrapType<C> // { a: string, b: string }


На этот раз последний пост в этом году, всех с наступающим! ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
React RFC: use()

Читая X(Twitter) увидел пост про новый RFC в React: useIsolation()
Поизучав тему, вспомнил про свои наработки в этом русле, когда у нас есть контекст с полями и нужно чтобы хук был привязан ТОЛЬКО к определенному полю, дабы избежать лишних ререндеров, чтобы было понятнее, вот пример с псевдокодом (ререндер будет производиться только с тем полем, которое было изменено в скоупе):

const IsolatedContext = createIsolatedContext(null);

function useBar() {
const { bar } = useIsolatedContext(IsolatedContext);
return bar;
}

function useFoo() {
const { foo } = useIsolatedContext(IsolatedContext);
return foo;
}

function Foo() {
const foo = useFoo();
return <div>{foo}</div>;
}

function Bar() {
const bar = useBar();
return <div>{bar}</div>;
}

export function App() {
return (
<IsolatedContext.Provider>
<Foo />
<Bar />
</IsolatedContext.Provider>
);
}


К тому же, есть еще такой паттерн: https://github.com/reactjs/rfcs/issues/168

Но я тут не для этого пишу этот пост, самое интересное, что хук use() в будущем скорее всего станет работать именно так (ответ Дэна):

function useFoo() {
return useMemo(() => {
const { foo } = use(SomeContext);
return foo;
}, []);
}


К тому же, есть информация, что React Forget будет на этапе компиляции точечно мемоизировать такие участки кода.

Всё это были мои мысли насчет надвигающего хука use(), а что думаете вы? 🤔
Please open Telegram to view this post
VIEW IN TELEGRAM
Пост по обновлению Node.js 21.7.0 задержался, ну да ладно, пишу с небольшой просьбой (только maсOS), но для начала пройдемся по новым фичам.

Неожиданно, форматирование из коробки, окей!

import util from 'node:util'

util.styleText('bold', styleText('bgCyan', 'Привет!')

console.log(util.inspect.colors) // мапка с цветами


Загрузка и парсинг .env файлов, поддержка многострочных значений. К тому же, ранее был добавлен флаг --env-file

process.loadEnvFile() // загрузит .env, можно передать аргументом актуальный путь до .env
console.log(process.env.SOME_ENV_VALUE)

import util from 'node:util'
util.parseEnv('HELLO=world') // { HELLO: 'world' }


Node.js SEA — как же я много хапнул боли, копаясь в них, начиная от сборки, заканчивая внедрением внешних зависимостей, шокирование людей размером бинарника 😁

Ну так вот, теперь перейдем к самой просьбе для macOS-ников. Есть у меня тут репозиторий, где я тестирую SEA как оно есть. Начиная с 21.7.0 перестала работать подпись, вообще, даже на macOS, а вот с патча 21.7.1 вроде как исправили, но я не уверен насчет macOS, если есть желающие, можете законтрибьютить сюда, пример сборки находится здесь.

P.S. Кто не понял, что за Node.js SEA, прошу ознакомится https://t.me/crashmaxdev/351
Наткнулся на сайт "Вопросы с собеседований". Раздел с Frontend насчитывает около 1400 вопросов, а прикол в том, что просчитана вероятность с которой вопрос будет задан на собеседовании и есть пример ответа.

Еще можете зайти в канал с разбором вопросов: https://t.me/easy_javascript_ru
Iterator helpers (proposal)

Пропозал расширяет Iterator.prototype новыми методами: drop, every, filter, find, flatMap, forEach, map, reduce, some, take и toArray (уже доступно в Google Chrome 122+).

Cтатический метод Iterator.from создает итератор. Если объект имеет Symbol.iterator, вызывает его для получения итератора. В противном случае создается новый объект Iterator.

class Iter {
value = 0

next() {
return { value: ++this.value, done: this.value > 3 }
}
}

for (const value of Iterator.from(new Iter())) {
console.log(value) // 1, 2, 3
}

for (const value of Iterator.from([1, 2, 3])) {
console.log(value) // 1, 2, 3
}


Один из долгожданных пропозалов, который смог добраться до первой реализации в v8 🎉 Поскорее бы еще увидеть Temporal, ShadowRealm и Pipeline Operator.

https://v8.dev/features/iterator-helpers

P.S. Полифил в core-js https://github.com/zloirock/core-js#iterator-helpers
Please open Telegram to view this post
VIEW IN TELEGRAM
Заметка будет полезна для тех, кто использует PNPM + Turborepo на GitHub Actions.

Благодаря этому экшену https://github.com/dtinth/setup-github-actions-caching-for-turbo получилось ускорить сборку в несколько раз » FULL TURBO. Ниже прикладываю пример, забирайте, кому будет полезно 🤝🤝

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup turborepo cache
uses: dtinth/setup-github-actions-caching-for-turbo@v1

- name: Install pnpm
uses: pnpm/action-setup@v3
with:
version: 8

- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: pnpm

- name: Install dependencies
run: pnpm install

- name: Build apps
run: pnpm build
Please open Telegram to view this post
VIEW IN TELEGRAM
Собрал для вас в одну папку авторов, ведущих блоги по фронтенду, веб-разработке и вокруг неё.

🔗 https://t.me/addlist/Z6Efi4jXwe9lODcy

Специально отобрал именно ламповые авторские блоги, а не перепосты ссылок, документации или тексты не про код.

Для меня это хороший способ следить за реакциями о событиях индустрии. Например, конференции проходят не так часто, и контент с них становится общедоступным не сразу. Кроме того, там обычно рассказывают о чём-то эпичном, не сиюминутном, так как формат обязывает. А вот в авторских бложиках (и комментариях к постам) можно собрать цельную картинку происходящего в рутине, и не просто факты, а именно авторскую интерпретацию и комментарии.

Надеюсь, будет полезно ✌️

@web_platform | Поддержать канал 🤝