https://ilovefrontend.ru
Добро пожаловать на канал melikhov.dev! Здесь вы найдете всю информацию о фронтенде, фронт-беке и многом другом. Наш канал предназначен для всех, кто интересуется веб-разработкой и хочет быть в курсе последних технологий. Мы делимся полезными советами, обзорами инструментов и техниками программирования. А иногда мы радуем вас милыми котиками, чтобы сделать ваш день ярче. Не пропустите новые записи и подпишитесь на наш канал melikhov.dev прямо сейчас! Погрузитесь в мир веб-разработки вместе с нами!
14 Feb, 19:51
06 Feb, 10:31
19 Jan, 14:37
02 Jan, 14:39
31 Dec, 20:53
31 Dec, 19:39
31 Dec, 07:41
29 Dec, 08:15
25 Dec, 13:39
req
и res
дальше контроллера — и вот уже приятнейшие улучшения в нашем коде возникают сами по себе. 24 Dec, 11:43
15 Dec, 08:44
07 Dec, 15:52
01 Dec, 13:36
type TestType = {a: number | string; b?: string};
const testObject = {a: 1} as TestType;
testObject.a.toFixed(); // Ошибка: Property 'toFixed' does not exist on type 'string'.
satisfies
type TestType = {a: number | string; b?: string};
const testObject = {a: 1} satisfies TestType;
testObject.a.toFixed(); // Никаких ошибок
testObject.b?.toUpperCase(); // Ошибка: Property 'b' does not exist on type '{ a: number; }'
01 Dec, 13:11
14 Nov, 08:22
npm
на минор и вылез ворнинг
(node:45421) ExperimentalWarning: CommonJS module /opt/homebrew/lib/node_modules/npm/node_modules/debug/src/node.js is loading ES Module /opt/homebrew/lib/node_modules/npm/node_modules/supports-color/index.js using require().
Support for loading ES Module in require() is an experimental feature and might change at any time
(Use node --trace-warnings ... to show where the warning was created)
require()
для ESM-модулей. Зачем нужен ворнинг? Потому что поддержка неполноценная и если прилетит ESM c top level await то всё полетит к чертям (и это очень опасный момент с которым пока непонятно как жить).supports-color
апнули на мажор. Это модуль от Синдре. Ну вы понимаете. Синдре опять переписал всё на pure ESMdebug/src/node.js
— try catch
try {
require('supports-color')
} catch (error) {
// Swallow - we only care if `supports-color` is available; it doesn't have to be.
}
08 Nov, 13:05
04 Oct, 19:27
04 Oct, 19:27
19 Sep, 09:38
01 Sep, 07:30
18 Aug, 14:49
17 Aug, 12:27
12 Aug, 21:22
--experimental-transform-types
, который добавляет возможность запускать файлы с TypeScript-only (требующем трансформации) синтаксисом (Enum, namespace, module с поддержкой source-map). Однако Node.js всё ещё не читает ваш tsconfig.json
.import
, require
) файл, вам необходимо будет указать расширение .ts
, которое включается в TS-конфиге опцией allowImportingTsExtensions
. А ещё появилась целая команда для поддержки TypeScript в Node.js.type
импорты, как при включенном verbatimModuleSyntax в TS-конфиге, иначе вы получите ошибку в рантайме.import type { Type1, Type2 } from './module.ts';
import { fn, type FnParams } from './fn.ts';
process.features.typescript
// ^? "strip" | "transform"
.ts
файлов облегчат жизнь всему нашему сообществу.02 Aug, 11:40
29 Jul, 07:36
02 Jul, 20:57
27 Jun, 13:06
12 Jun, 08:21
09 Jun, 12:51
npm ci && npm run build && npm run start
и поднимает инстанс, на который мы натравливаем E2E. Да-да, мы знаем про докер, но пока не успели.node_modules
. Локально не повторяется. Захожу на ферму, дёргаю npm ci
из консоли — всё ок. Зависимости не ставятся:npm ci
вызывается из самой фермы через child_process.exec
,env
. Ого, а там npm_config_legacy_peer_deps: 'true'
. П-нятненько почему зависимости не ставятся, они же peerDeps. legacy-peer-deps
залетает в env,.npmrc
лежит legacy-peer-deps=true
. Когда мы её запускаем через npm run start
npm читает .npmrc
и прокидывает в env всю свою лабуду в npm_config_*
. А child_process.exec
запускает дочерние процессы с process.env
родителя.npm ci --legacy-peer-deps
не разрушал приложение, потому что ставил все зависимости как и было написано в package-lock.json
. Но в конкретной ветке случилась коллизия, зависимость поставили и в devDependencies
и в просто dependencies
. Вот после этого npm ci
перестал доверять package-lock.json
и пересчитал всё дерево, уже тихо применяя к нему правило --legacy-peer-deps
.07 Jun, 14:33
22 May, 21:00
11 May, 19:21
01 May, 09:11
import http from 'node:http';
const server = http.createServer((req, res) => { res.end('some stuff') });
server.keepAliveTimeout = 5000; //default
server.listen(1337, '127.0.0.1', startSendingRequests);
function startSendingRequests() {
const keepAliveAgent = new http.Agent({keepAlive: true, timeout: 5000});
setInterval(() => {
http.get('http://127.0.0.1:1337', {agent: keepAliveAgent}, (res) => {
res.on('data', (chunk) => {
console.log(`BODY: ${chunk}`);
});
}).on('error', (e) => {
console.error(`problem with request: ${e.message}`);
});
}, 5000)
}
.on('error', (err) => {
// Check if retry is needed
if (req.reusedSocket && err.code === 'ECONNRESET') {
retriableRequest();
}
});