ToCode
Kanalga Telegramโda oโtish
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Ko'proq ko'rsatish1 419
Obunachilar
-124 soatlar
Ma'lumot yo'q7 kunlar
-230 kunlar
Postlar arxiv
1 419
ืื ืืกืฃ ืืคืื ืงืฆืื
advanceTimersByTime ืื ื ืจืืื ืขืื ืืืจ ืืืฉ: ืืงืจืืื ืืคืื ืงืฆืื act, ืฉืขืืืคืช ืืช advanceTimersByTime. ืคืื ืงืฆืืืช act ืฉืืืืช ื react-testing-library ืืืื ื ืืขืื ืืืคืฉืจ ื testing library ืืืืืช ืฉืืื ืฉืื ืื ืืืจื ืืจ ืืืืฉ ืืช ืืงืืืคืื ื ืื. ืืืจื ืืื ืืฉืื ืื ื ืขืืืืื ืขื ืฉืขืื ืื ืืืืชืืื ืืขื find ืืืืจ ืืื ืงืืจื ืืืืืืืืช, ืืื ืืืขืืจ ืืฉืขืื ืืืืืฃ ืื ืื ื ืืืืืื ืืช ืืคืื ืืง ืืฆืจืืืื ืืืืื ืืฆืืจื ืืคืืจืฉืช ื testing library ืฉืงืืืื ืืฉืขืื ืื ืืืจืื ื render ืืืืฉ.
ืขืืฉืื ืืืืชื ืงืืืช ืื ื ืืืื ืืืชืื ืงืื ืฉืืืื ืืืชื ื ืฉื 10 ืฉื ืืืช ืืืืืื ืืช ืืขืจื ืฉื ืืฉืขืื:
test('after 10 seconds the value changes to 10', () => {
render(<Timer />);
act(() => {
jest.advanceTimersByTime(10000);
});
expect(screen.getByText(/10/)).toBeInTheDocument();
});
ืืื ืืื ืืจืืฅ ืืฆืืจื ืืืืืืช ืืืืืช ืืฉืขืื ืืืืืืฃ.
## ืืืืงืช ืขืฆืืจื ืืืคืขืื ืืืืฉ ืฉื ืืฉืขืื
ืขืืฉืื ืฉืื ื ืืืืข ืืืืื ืืช ืืืื ืงืืืื ืืคืฉืจ ืื ืกืืช ืืขืฆืืจ ืืช ืืฉืขืื ืืืจืืืช ืฉืืื ืืืืช ืื ืืชืงืื ืืฉืืฉื ืืืช ืขืืืจืืช. ืื ื ืืืืืงื ืืืื:
test('clicking "stop" stops the timer', () => {
render(<Timer />);
const stopButton = screen.getByRole('button', { name: /stop/i });
userEvent.click(stopButton);
act(() => {
jest.advanceTimersByTime(1000);
});
expect(screen.getByText(/0/)).toBeInTheDocument();
});
## ืืืืงืช ืฉืื ืื ืงืฆื ืืฉืขืื
ืืืืงื ืืืจืื ื ืืงืืืคืื ื ืื ืืื ืฉืื ืื ืงืฆื ืืฉืขืื, ืืื ืืืชื ืื ื ืืืชื ืืืกืืช ืืงืืืช ืืืจื ืื ืื ืฉืจืืื ื:
test('after changing the speed, the timer moves faster according to the new value', () => {
render(<Timer />);
const speed = screen.getByRole('spinbutton');
userEvent.clear(speed);
userEvent.type(speed, "500");
act(() => {
jest.advanceTimersByTime(1000);
});
expect(screen.getByText(/2/)).toBeInTheDocument();
});
ืืคืขื ืืฉืื ื ืืชืงืื ืืฉื ืื ืื ื ืืฆืคื ืฉืืืกืคืจ ืืขืื ื-2, ืืืืืช ืื ืงืืจื.1 419
# ืืืืงืืช ืฉืขืื ืื ืขื react-testing-library
ืกืคืจืืืช react-testing-library ืชืืืืช ืืฆืืจื ืืืื ืืงืืืคืื ื ืืืช ืฉืขืืฉืืช ืืืจืื ืืจืงืข ืืฆืืจื ืืกืื ืืจืื ืืช ืืืืืืงื ืฉืืื. ืืคืืกื ืื ื ืืืจ ืขื ืฉืขืื ืื ืื ืจืื ืืื ืืืืืง ืงืืืคืื ื ืืืช ืฉืืืฉืคืขืืช ืืืื.
## ืืงืืืคืื ื ืื
ืื ื ืืชืืื ืขื ืืงืืืคืื ื ืื ืืืื:
import { useState, useEffect } from 'react';
export default function Timer() {
const [ms, setMs] = useState(1000);
const [ticks, setTicks] = useState(0);
const [ticking, setTicking] = useState(true);
useEffect(() => {
let clock = null;
if (ticking) {
clock = setInterval(() => {
setTicks(t => t + 1);
}, ms);
}
return () => {
clearInterval(clock);
};
}, [ticking, ms]);
function start() {
setTicking(true);
}
function stop() {
setTicking(false);
}
return (
<div>
<p>Ticks: {ticks}</p>
{ticking
? <button onClick={stop}>Stop</button>
: <button onClick={start}>Start</button>
}
<input type="number" value={ms} onChange={(e) => setMs(e.currentTarget.value)} />
</div>
);
}
ืืงืืืคืื ื ืื ืืืืฆืืช ืฉืขืื ืืกืื ืืจืื ื. ืืฉืืงืืืคืื ื ืื ื ืื ืกืช ืืืกื ืืฉืขืื ืืืฆื "ืืืืง" ืืื ืื ืฉื ืื ืืงืืืคืื ื ืื ืืฆืืื ืืกืคืจ ืขืืื (ืืชืืื ื-0). ืืคืฉืจ ืืืืืฅ ืขื ืืคืชืืจ Stop ืืื ืืขืฆืืจ ืืช ืืฉืขืื ืืื ืฉืื ืขื ืืคืชืืจ Start ืืื ืืืคืขืื ืืืชื ืฉืื, ืืืคืฉืจ ืืฉื ืืช ืืช ืืืืืจืืช ืืืืฆืขืืช ืฉืื ืื ืืืงืกื ืืชืืื.
## ืืืืงืช ืืฆื ืจืืฉืื ื
ืืืืืงื ืืจืืฉืื ื ืขื ืืืืืจ ื ืจืฆื ืืืืื ืฉืืื ืืืคืืข ืืืฆื ืืจืืฉืื ื ืฉืืืืจื ื, ืืืืืจ ืขื ืืขืจื 0, ืขื ืืืืจืืช ืฉื ืฉื ืื ืืขื ืืืคืชืืจ Stop:
test('initial values', () => {
render(<Timer />);
expect(screen.getByText(/0/)).toBeInTheDocument();
expect(screen.getByRole('button', { name: /stop/i })).toBeInTheDocument();
expect(screen.getByRole('spinbutton')).toHaveDisplayValue(1000);
});
## ืืืืงืช ืืชืงืืืืช ืืฉืขืื
ืืขืืฉืื ืืคืฉืจ ืืืืฉืื ืืืืืงื ืืืชืจ ืืขื ืืื ืช - ืืืื ื ืจืื ืฉืืืจื ืฉื ืื ืืฉืขืื ืืืืช ืืชืงืื. ืื ืื ื ืืืืขืื ืฉืืืจื ืฉืืฉืขืื ืืชืงืื ืืืงืกื ืืชืขืืื ืืืกืคืจ 1, ืืืื ืืืืืื ืืืชืื ืืช ืืืืืงื:
test('after 1 second the value changes to 1', async () => {
render(<Timer />);
expect(await screen.findByText(/1/, {}, { timeout: 3000 })).toBeInTheDocument();
});
ืื ื ืืฉืชืืฉ ื findByText ืืื ืืืฆืื ืืช ืืืืื ื ืขื ืืืงืกื 1. ืืืืคืืฉ ืขื find ืืืื ืขื ืฉืืืืื ื ืืืคืืข, ืืืืื ืื ืขืืื ื ืืืชืื ืืคื ืื await. ืืืื ืฉืืฉ await ืืงืื ืืืืืงื, ืคืื ืงืฆืืืช ืืืืืงื ืฆืจืืื ืืืืืช ืืกืืื ืช ืืชืืจ async.
ืืคืขืื ืฉื ืืืืืงื ืืืื ืฉืืื ืขืืืืช, ืืื ืืื. find ืืืื ืืคืขืืื ืื ืฉืชื ืฉื ืืืช ืขื ืฉืืขืจื ืืชืขืืื, ืื ืจืื ืืืื ืฉืกืคืจืืืช ืืืืืงืืช ืื ืจืืื ืืช ืืฉืื ืื ืืืืืง ืืฉืืื ืงืืจื.
ืืื ืืืขืืคื ืฉืื ื ืืืืืงืช ืงืื ืืกืื ืืจืื ื ืืืืืช ืืืคืฉืจ ืืื ืืืคืื ืืช ืืงืื ืืกืื ืืจืื ื ืื ืืคืืืช ืืืืืื. ืืืงืจื ืฉื ืฉืขืื ืื ืืืจืืง ืืื ืืืจืืก ืืช ืืคืื ืงืฆืืืช setInterval ื setTimeout ืืืืืฆืจ "ืฉืขืื" ืืืืืฃ, ืฉืืคืฉืจ ืืืืื ืืืชื ืืฆืืจื ืชืื ืืชืืช. ื'ืกื ืืกืคืง ืื ืืช ืืืืื ืืื ืืืืฆืขืืช ืืคืื ืงืฆืื:
jest.useFakeTimers();
ืื ื ืืืกืืฃ ืืชืืื ืืช ืืืืืงื ืฉืื ืืช ืืงืื ืืื:
beforeEach(() => {
jest.useFakeTimers();
});
afterEach(() => {
jest.useRealTimers();
});
ืืืืืง beforeEach ืืืืืจ ืงืื ืฉืืจืืฅ ืืคื ื ืื ืืืืงื, ืืืืืืง afterEach ืืืืืจ ืืช ืืงืื ืฉืืจืืฅ ืืืจื ืื ืืืืงื (ืืฉ ืื beforeAll ื afterAll). ืื ื ืืฉืชืืฉ ืืฉื ื ืืืืืงืื ืืื ืืืคืขืื ืฉืขืื ืื ืืืืืคืื ืืคื ื ืื ืืืืงื, ืืืืืืืจ ืืช ืืืฆื ืืงืืืืชื ืืกืืฃ ืืืืืงืืช.
ืขืืฉืื ืืงืื ืืืืืงืืช ืื ื ืืืื ืืงืจืื ื:
jest.advanceTimersByTime(1000);
ืืื ืืืื ืงืืืื ืืืื. ืื ื ืืขืืื ืืช ืงืื ืืืืืงื ืืื ืืืื ืืช ืืืฉืขืื ืืืืืืฃ ืืืืฉ ืฉืื:
test('after 1 second the value changes to 1', () => {
render(<Timer />);
act(() => {
jest.advanceTimersByTime(1000);
});
expect(screen.getByText(/1/)).toBeInTheDocument();
});1 419
# multipass ืืื ืืืจื ืืื ืงืื ืืงืื ืืืื ืช ืืืืื ืื ืืืจืืืืืืช ืขื ืืืืฉื ืฉืืื
ืชืืื ืืช ืืื virtualbox ืื vmware ืืืคืืืช ืืช ืืืชืงื ื ืฉื ืืืื ืช ืืื ืืงืก ืืืจืืืืืืช ืืืืื ืคืฉืืื, ืืืืืืชื ืืคืฉืจ ืืืชื ืกืืช ืขื ืืคืฆืืช ืืืฉืืช ืืืืื ืืช ืืืกืืืื ืืืจืคืืช ืืฉืื ื ืืืืืืืืจื ืืฉืื ื ืฉื ืื ืืคืฆื. ืืื ืืคืขืืื ืื ืื ื ืจืง ืจืืฆืื ืืืจืืฅ ืืฉืื ืืืกืืฃ ืื ืืืืืง ืืฉืื ืืืชืจ ืงืื, ืื ืืืืืคืื ืืืจืืฅ ืืกืคืจ ืืืื ืืช ืืื GUI ืฉืืชืงืฉืจื ืืื ืืื ืืจืฉืช. ืืืฆืืื ืืืื ืชืืื ืืช ืืืืจืืืืืืืฆืื ืขืฉืืืืช ืืืืืช "ืืืชืจ ืืื". ืชืืื ืช Multipass ืืฆืืขื ืคืืชืจืื ืืจืื ืืืชืจ ืืืืืง ืืืืื ืื ืืื ืฉืจืืฆื ืืืจืื ืืืื ืืช ืืืืื ืื ืืืจืืืืืืืช, ื ืืืืืช ืืืฉืง ืืจืคื, ืขื ืืืืื ื ืืืงืืืืช.
## ืืืืื ื ืืจืืฉืื ื ืฉืื
ืฉืื ืจืืฉืื ืืื ืืืชืงืื ืืช multipass ืืืืชืจ ืฉืืื ืืืชืืืช:
https://multipass.run/install
ืคืฉืื ืืืืจืื ืืช ืืขืจืืช ืืืคืขืื ืฉืืื ืืขืืืืื ืืคื ืืืืจืืืช. ืืฉ ืชืืืื ืืืื ื Linux, Windows ื Mac (ืืืื ืืขืื ืืคื).
ืืืจื ืืืชืงื ื ืืืชืืื ืืืืกืืฃ:
multipass shell
ืืืฉ ืืื Shell ืืชืื ืืืื ืช ืืืืื ืื ืืืฉื ืื ืืืืช ืืืฉืง ืืจืคื.
## ืื ืขืื
ืืืืื ื ื ืืฆืจื ืขื ืืืกืง ืฉื 5 ื'ืืื ืื'ืืื ืืืืจืื. ืืื ืืจืืฆื ืืช Ubuntu LTS ืืืืจืื ื ืืืื ืืชืืืจืช ืืืื ืืจื ื ืืจื ืืืืื ื ืืืืจืืช.
ืืคืฉืจ ืืืืกืืฃ ืขืื ืืืื ืืช ืืืืจืกืืืช ืืืจืืช ืฉื Ubuntu, ืื ืขื ืืืืื ืืืจืื ืืืืฆืขืืช ืคืงืืืช multipass launch, ืืืฉื ืืฉืืื ืืืจืืฅ ืืืื ื ืืืฉื ืฉื ืืืืื ืื 18.04 ืื ื ืืืื ืืืชืื:
multipass launch 18.04 -n my-old-ubuntu
ืืคืจืืืจ -n ืงืืข ืืช ืฉื ืืืืื ื ืืืืจื ืื ืืฉืืื ืืืืื ืก ืืืื ืื ื ืืฆืืจื ืืฆืืื ืืช ืืฉื:
multipass shell my-old-ubuntu
ืืคืงืืื multipass find ืชืฆืื ืืื ืจืฉืืื ืฉื ืื ืืืืื'ืื ืฉืชืืืื ืืืชืงืื ืืืืื ื ืืืืจืืืืืืช, ื multipass list ืชืฆืื ืืช ืื ืืืืื ืืช ืฉืืืชืงื ืืช ืืฆืืื.
ืืืืืืคืืก ืื ืชืืืืช ื cloud-init ืฉืื ืกืงืจืืคืืื ืืืชื ืืคืฉืจ ืืงื ืคื ืืช ืืืืื ื, ืืงืืืข ืืืื ืืืืืืช ืืืชืงื ื ืืืืืืืืช, ืืืื ืืฉืชืืฉืื ืืืื, ืขืจืืื ืฉื ืงืืฆื ืงืื ืคืืืืจืฆืื ืืื ืืืื.
## ืืืคื ืืืืืื ืืืชืจ
ืืชืืขืื ืืืืื:
https://multipass.run/docs.
ืืื ืืคืฉืจ ืืืคืขืื:
multipass help
ืืืงืื ืืื ืกืืฃ ืืืืข ืืืขืื ืขื ืืคืงืืืืช.1 419
# ืืืื ืืืืชื: ืืคืงืืื fc ืชืืคืฉืจ ืืื ืืขืจืื ืืืกืืืจืื ืืืืจืืฅ ืืืชื ืฉืื
ืื ืืืื ืื ืงืืจื ืืขืชืื ืงืจืืืืช, ืืื ืืคืขืืื ืืฉ ืื ื ืคืงืืื ืื ืืื ืคืงืืืืช ืืืืืกืืืจืื ืฉืื ืื ื ืจืืฆืื ืืืจืืฅ ืฉืื ืืฉืื, ืืืื ืืืืืง fc ืืืืื ืืขืืืจ.
ืืฉืืืืฉ ืืคืฉืื ืฉืื ืืคืงืืื ืืืืขืช ืืืฆืื ืคืงืืืืช ืืฉื ืืช ืฉืืจืฆืชื. ืืื ืื ืื ื ืืคืขืื:
mkdir foo
touch foo/bar
cp /etc/passwd foo
ืื ืื ื ืืืื ืืืจื ืื ืืืชืื:
fc -l mkdir cp
ืืืงืื ืืช ืจืฉืืืช ืื ืืคืงืืืืช ื mkdir ืขื cp ืืืื:
544 mkdir foo
545 touch foo/bar
546 cp /etc/passwd foo
ืื ืฉืืืชืจ ืืืืืง ืงืืจื ืื ืื ื ืืืืชืจ ืขื ื -l, ืืื fc ืคืืชื ืืช ืืจืฉืืื ืืชืื ืขืืจื ืืงืกื, ืืืคืฉืจ ืื ืืฉื ืืช ืืช ืืคืงืืืืช ืืืกืืฃ ืืจืืฅ ืืช ืืืื. ืืืืืื ืฉืื ื ืื ื ืืืืชืจ ืขื ื -l ืืืงืื ืืช ืื ืืจืฉืืื ืืขืืจื ืืงืกื, ืืฉื ื ืื ืืืคืข ืฉื foo ื bar ืืืงืื ืืช ืืงืืืฅ:
mkdir bar
touch bar/bar
cp /etc/passwd bar
ืฉืืืจ ืืืืฆื ืืื ืืฆืจืชื ืืช ืชืืงืืืช bar ืืืืืง ืืื ืฉืืฆืจืชื ืงืืื ืืช ืชืืงืืืช foo.
ืฉืืื ืื ืจืง ืฉืืชื ืืืืงืื ืืื ืืื ืื ืืชื ืืจืืฆืื ืืฉืืชื ืืชืื ืืขืืจื, ืื ืืจืืข ืฉ fc ืืฆื ืืืจื ืื ืืคืฉืจ ืืขืฆืืจ ืืืชื ืืื ืฉืคืงืืื ืืกืืืืช ืืืคืืขื ืืืืกืืืจืื ืื ืืืืจื ืืืืจ ืฉืืชื ืจืืฆืื ืืืจืืฅ ืืืชื ืฉืื.1 419
# ืืื ืืขืจื ืจืืง ืฉืืื 0?
ืื ืชืืื ืื ืื ื ืืกืืืืื ืขื ืืฉืืขืื ืืช ืฉื ื'ืืืืืกืงืจืืคื ืืื ืืจืื ืคืขืืื ืื ืืฉ ืืืื ืืืืืื ืคื ืืื ืฉืืืื ืืขืืืจ ืืืกืืืจ ืืช ืืืืจืืฃ. ืืขื ืืืงืืื ืืืืช ืืืื ื ืืืจ ืขื ืืขืจืืื.
## ืงืืื ืืขืืืืืช:
ืื ืืงืื ื node.js ืืืจืกื 18, ืื ืืคืืคื ืื ืืชื ืืืื ืืื:
> Number([])
0
> Number([4])
4
> Number([2, 3, 4])
NaN
ืื ืื'ืืืืืกืงืจืืคื ืืฉืื ื ืืืคื ืืขืจื ืืืืื ืืคืก ืืืกืคืจ ืื ื ืืงืื ืืช ืืืกืคืจ ืืคืก, ืืขืจื ืฉื ืืกืคืจ ืืืื ืืืชื ืื ืืช ืืืกืคืจ ืืื ืืืขืจื ืืืืื ืืืื ืืืชืจ ืืืคืื ื NaN.
## ืืื ืืื ืื ืงืืจื?
ืืฉืืื ืืืคืื ืืืืืงืืื ืืคืจืืืืืืืืื ื'ืืืืืกืงืจืืคื ืืฉืชืืฉ ืืฉืืืฉ ืืื ืืงืืช (ืืคื ืืกืืจ ืืื):
1. ืงืืื ืื ืืื ืืืืง ืื ืืืืืืงื ืืืืืจ ืืกืืืืื Symbol.toPrimitive, ืื ืื ืืคืขืื ืืืชื.
2. ืื ืืื toPrimitive ืื ืกืื ืืืคืขืื ืืช valueOf.
3. ืื ืื ืื ืื ืขืืจ ืืคืขืืืื ืืช toString.
ืืืขืจืืื ืืื toPrimitive ืื valueOf ืฉืืื ืืืืืจ ืืช ืืืขืจื ืขืฆืื, ืื ื ืฉืืจื ื ืจืง ืขื toString:
> [].toString()
''
> [4].toString()
'4'
> [2, 3, 4].toString()
'2,3,4'
ืืืืจืืืช ืืจืืฉืื ื ืจืืงื ืืืื ืืืคืืช ืืืคืก, ืืฉื ืื ืืืคืืช ืืืกืคืจ 4 ืืืช ืืฉืืืฉืืช ืืืจ ืื ืืคืฉืจ ืืืคืื ืืืกืคืจ ืืืื ืืืคืืช ื NaN.
## ืจืืข ืชืืืืจ ืื ืื ืื Symbol.toPrimitive
ืืืงืื ืื ืืื ื ืืื ืืขืจืืื ืืชื ืืืื ืืื ืืื ืื ืื ืืขืฆื Symbol.toPrimitive ืืืื ืืคืฉืจ ืืืฉืชืืฉ ืื ืืื ืืฉื ืืช ืืช ืืืชื ืืืืช?
ืืื ืืืืืงื ื JavaScript ืื ื ืืืื ืืืืืืจ ืืคืชื ืืืืื ืฉืื ืืกืืืืื toPrimitive ืฉืืืื ืคืื ืงืฆืื, ืืืืืืจ ืืช ืืืืืืงื ืืฆืืจืช ืืคืจืืืืืื ืฉืื. ืื ื ืื ืืืืืื:
> const x = {
[Symbol.toPrimitive](hint) { return 7 }
};
undefined
> Number(x)
7
ืืืฉืชื ื hint ืฉืขืืืจ ืืคืื ืงืฆืื ืืืืจ ืื ืื ืกืื ืืคืจืืืืืื ืฉืื ืื ื ืืฆืคืื ืืงืื, ืืืืืจื ืืืกืคืจ ืืฉ ืื ืืช ืืขืจื number.
ืืคืฉืจ ืืืืกืืฃ ืืช ืืกืืืืื ืืื ืืื ืืืืืงื ืฉืจืืฆืื, ืืืื ืืื ืืืขืจืืื. ืืืืืื:
> Array.prototype[Symbol.toPrimitive] = () => 42;
[Function (anonymous)]
> Number([2, 3, 5])
42
ืืขื ืื ืืคืฉืจ ืืชืงื ืืช ืืืืจื ืืืกืคืจ ืื ืฉืชืืื ืงืฆืช ืคืืืช ืืืืจื - ืืืฉื ืื ืื ื ืืืืืื ืืขืืื ืืช ืืชืืื ืืช ืื ืฉืื ืืืจื ืฉื ืืขืจื ืืืกืคืจ ืชืืืืจ ืืช ืืืื ืืืขืจื:
> Array.prototype[Symbol.toPrimitive] =
function() {
return this.length;
}
> Number([2, 3, 5])
31 419
# ืื ืืืื ืืืืืช ืืืฃ
ืื ื ืืืืจ ืฉืืฉืืชื ืขื ืืืจ ืฉืขืื ืืชืืื ืฉื Penetration Testing ืืืืจืชื ืื - "ืืืื ืืฉ ืื ืืช ืืขืืืื ืืื ืืืคืืช ืืขืืื, ืื ืืืื ืืชื ืืืคืฉ ืืืืฉืืช ืืืขืจืืืช ืืืืื ืืฉืืืจ ืืืจืื". "ืชืืฉืื ืืืืื" ืืื ืขื ื ืื, "ื ืืื, ืืฉ ืืช ืืืืง ืืื ืฉืฆืจืื ืืฉืืืจ ืืืจืื ืืืืฆืื ืืืืฉืืช, ืืื ืจืื ืืืื ืื ื ืจืง ืืืชื ืืืืืช ืืืืจืื ืืคื ืืืกืืืจ ืืช ืื ืื ืฉืืฆืืชื". ืืืืื ืืื ืืขืฉืืช ืืฉืื ืืฉืืื ืืืืฃ ืืืขืฉืืช ืืฉืื ืืฉืืื ืขืืืื ืืขืืื ืื ื ืจืื ืืจืืจ ืืืชืจ.
ืืืืชื ืืืื ืชืืงืฃ ืืืชื ื ืื ืืฉืื ืื ื ืืืื ืืฉืืจื ืืช ืืงืจืืืจื ืื ืืงืื ืฉืื ื:
1. ืืืชืืืช ืคืจืืืงื ืฆื, ืืืชืืื ื ืจืืืช ืืืืืื (ืืืื ืืืฃ ืื ื ืืืื ืืืชืขืกืง ืขื ืืื ืืื ืืืืืืืช ืืืฉืืช), ืขื ืฉืืชื ืืืื ืฉืืฉืืื ืฉืืืจืื ืืขืืื ืืื ืืื ืืขืืจ ื Tutorial ืืืกืืกื, ืฆืจืื ืืืชืืืฅ, ืื ืืืืื ืืืคืขืืื ืคืฉืื ืืืจืืง ืขืื ืฉืืจืืช ืงืื ืขื ืืืขืื, ืืืืืง ืืื ืืขืืืื ืืืืืชืืช.
2. ืืืืื ืชืืื ืืืฉ ืขืฉืื ืืืืจืืืช ืืื ืืืืจ ืืื ืืืืื ืืขืืื, ืขื ืฉืืชื ืืืื ืฉืืฉื ื ืืจืืฉืื ื ืืืืจืื ืืืืืืื ืฉืชืฆืืื ืืื ืืช ืื ืืจืื ืคืืืช ืืืืืืื ืืืื ืฉืืืืช ืขืืืื. ืฉืืคื ื ืฉืชืฆืืื ืืื ืืช ืืช ืืืฉืืง ืฉืชืืื ืืืืช ืขืืื ืชืฆืืจื ืืื ืืช ืืื ืกืืฃ ืืฉืืงืื ืคืฉืืืื ืืืฉืขืืืื ืจืง ืืื ืืืืื ืืช ืืืกืืืืช.
3. ืืื ืกืช ืืื ืืืืืื ืืืฉื ืืคืจืืืงื ืขืฉืืื ืืืืจืืืช ืืื ืจืขืืื ืืืฉ ืืืืื, ืขื ืฉืืชืืืืื ืชืื'ืก ืืืชืื ืืช ืืงืื ืืจืืืื ืฉืืืจืื ืืืงืืื ืืืชืจ ืืื ืืื ืฉืงืืืืืช, ืืืคืืื ืืชืงื ืืช ืืืืืจืืช ืฉื ืจืื ืืืฉ ืคืฉืืืืช ื Tutorial ืืืคืืืช ืืืชืืจ ืืฉืฆืจืื ืืฉืื ืืืชื ืขื ืคืจืืืงื ืืืืชื.
4. ืืจืื ืืชืื ืชืื ืืืืืื ืขื ืคืจืืืงื Green Field, ืฉืื ืืืืื ืืืชืืื ืืื ืืืคืก, ืื ืขื ืืืื Rewrite ืืืื ืฉืืืจืื ืื ืืืขืืืช ืืขืืื. ืืจืื ืืืงืจืื ืืกืืื ืฉืคืจืืืงื Green Field ืืื ืคืฉืื ืืืชืจ ืืื ืืืืืง ืืืื ืฉืืชืืื ื ืืืคืก. ืืื ืฉืืืกืืคืื ืคืืฆ'ืจืื ืืงืื ืืกืชืื ืืืืืฃ ืฉืื ื ืขืื.
ืื ื ืืื ืชืืืื ืืืืืื, ืชืืืื ืืคืืชืื, ืชืืืื ืืงืืืื, ืื ืืืื ืื ืืืืืืื ืืื ืฉืืืืชื ืจืืฆืื ืฉืืืื. ืืื ืื ืชืชื ื ืืืืืื ืืื ืืืืืฉ ืืชืื - ืืืืจื ืืื, ืฉืืืื ืืื ืืืืืืืช ืืืฉืืช ืืืืืื ืชืืืืื ืืืฉืื ืื ืืืจื ืืืืืื ืงืืืื.
1 419
# ืจืืืืืื ืืฆืืข ืืจื ืงืื ืืืืฉื ืืคืชื ืืขื ื
ืืืื ืจืืื ื vercel ืืืืืจ ืืช ืืจืกื ืขืฆืื ืืืจืื ืืืืชืืจืืช ืฉืื ืืชืืจ "ืขื ื ืฉืืื 2", ืื ืืืืจืืช ืืขื ื ืืืกืืจืชืืืช ืื ืื ื ืฆืจืืืื ืืฉืืืจ ืืช ืืฉืื ืืื ืืฉืืื ืืื ืืช ืืคืืืงืฆืื - ืืืืจืืช ืืขื ื ืืืืฉืืช ืื ืื ื ื ืงืื Deployments ืืืืืฆืช ืืคืชืืจ, ืืืืืจ ืืืืืืื ืืื ืืคืฉืจืืช ืืืจืฆื ืืืืืงื ืืงืืืืช.
ืจืืืืืื ืืื ืืืช ืืืืจืืช ืืขื ื ืืืืฉืืช ืืืื ืืื ื ืืื ืืืจืื ืฉื ืจืื ืื ืฉืชืืืื ืื:
## ืืชืงื ืช ืืืฉืื ืืืฉ ืืฉืชื ืืืืฆืืช
ืจืืืืืื ืืฆืืขื ืืื ืกืืืืช ืคืืชืื ืืืื ืืขื ื ืืืชืฉืืื ืืคื ืฉืืืืฉ, ืืฉืืืฉืืืื ืคืฉืืืื ืืจืืฆื ืืืื ื (ืืชื ืืงืืืื ืืชื ื 5$ ืืืืืฉ), ืืืื ืฉืฆืจืืืื ืืืชืจ ืื ืืืฉืื ืื ืชืชืืืื ืืฉืื.
ืืคืืฆ'ืจ ืืจืืฉืื ืฉืืืืชื ืฉื ืืื ืืชืงื ืช ืืืฉืื ืืืฉ ืืืืืฆืช ืืคืชืืจ ืืชืื ืืืกืฃ ืืื ืกืืคื ืฉื ืชืื ืืืช ืืืฉืืืื ืฉืืื. ืืชื ืืืืืื ืืืืืจ ืืืฉืื ืจืืืืก, Node.JS Express, Django, Flask, ืื ืืืฉืืื ืืคืจืื ื ืื ื ืืืคืืื PHP ื Rust. ืคืฉืื ืืืืฆืื "New Project", ืืืืจืื ืืช ืืชืื ืืช ืืจืืืืืื ืืืจ ืืืฆืจื ืขืืืจืื ืคืจืืืงื ืืืฉ ืืืืืืื ืฉืืื ืืคื ืืืชื ืชืื ืืช, ืืืืืจื ืืืชื ืืขื ื ืฉืืื ืื ืฉืื ืงืืืื ืืืืืืื ืื ืืขืืื ืืช ืืืืจืกื ืืขื ื.
ืชืื ืืืช ืืคืจืืืงืืื ืืืจืืืืช ืืืืื ืืืืื ื ืฉืืจืืฆื ืืช ืืงืื, ืืื ืจืืืช ืืื ืืืืืืช ืื ืืกืืก ื ืชืื ืื ืืืืื ื ื ืคืจืืช ืืืืจื ืืฆืืจืช ืืคืจืืืงื ืืคืฉืจ ืืืืกืืฃ (ืฉืื ืืจื ืืืืฉืง) ืื Load Balancer ืืฉืืจ ืคืื ืืงืื.
## ืืื ืืงืจื ืขื ืืคืฉืจืืช ืืืืืจ ืืืืจื
ืื ืืฉื ื Deployment ืืืืืื ื next ืืื ื render, ืื ืคื ืืชื ืืืืืื ืืจืืืช ืื Deployment ืฉืขืฉืืชื ืืืื ืืืงืจื, ืืคืฉืจ ืืืืืจ ืืืจืกื ืืืืจื ืื ืืืจืกื ืืกืืืืช ืื ืขืืื ืืื, ืืคืฉืจ ืืจืืืช ืืช ืื ืืืืืื ืฉื ืื ืืืืื ืืช ืืืฉื ืืช ืืืืจืืช ืฉื ืืืื ืืช - ืืืื ืืืกืชืื ืื ืชืื ืื ืืืกืืก ืื ืชืื ืื ืืืขืืื ืืืชื.
ืจืืืืืื ืชืืืืื ืืืกืคืจ ืกืืืืืช ืืื ืคืจืืืงื ืื ืืชื ืืืืืื ืืืืืืจ ืกืืืืช ืคืจืืืงืฉื ืืืฉืชืืฉืื ืืืืืชืืื ืืกืืืืืช ืคืืชืื ืืื ืืชืื ืช ืืฆืืืช, ืืืื ืฉืื ืืืืืฆืช ืืคืชืืจ.
## ืขืืืื ืืงืืืืช ืืจื ื CLI ืฉืืื
ืคืืฆ'ืจ ืืืจืื ืืืืืืง ืืื ืืืืืืจ ืืืืฉื ืืืงืืื - ืื ื ืืงื ืืืืืื ืคืจืืืงื ืฉืืืื ืืืฉืื Node.JS Express ืฉืืชืืืจ ืืืกืืก ื ืชืื ืื, ืื ืืคืืชืื ืืงืืื ืืชื ืื ืจืืฆืื ืืืชืงืื ืืช ืื ืืืืื ืืืช ืืกืืก ืื ืชืื ืื ืื ืคืจื, ืืื ืืชื ืจืืฆืื ืืขืืื ืืืฉ ืขื ืืืืื ืืช ืฉืืขื ื ืืื ืืงืื ืชืืื ื ืืื ืฉืืืชืจ ืืืืืงืช ืฉื ืื ืฉืงืืจื.
ืจืืืืืื ืืืคืฉืจืื ืืช ืื ืขื ืืงืื ื CLI ืฉืืื. ืืชืงื ืชื ืืืชื ืขื:
npm i -g @railway/cli
ืืืืจื ืื ืืชืื ืชืืงืืืช ืืคืจืืืงื (ืื ืฆืจืื ืืขืฉืืช clone ืืคืจืืืงื ืืืืืืื ืฉืืื ืืืฆืจ ืืื), ืื ื ืืคืขืื railway link ืืื railway run npm run dev. ืงืฆืช ืืกืืจืื ืืื ืืชืืฆืื ืืื ืฉืืืคืืืงืฆืื ืืชืืืจืช ืืืกืืก ืื ืชืื ืื ืืขื ื ืฉื ืจืืืืืื ืืื ืืขืืืื ืืคืืชืื ื ืขืฉืืช ืืื ืืกืืก ืื ืชืื ืื ืืขื ื ืฉืืืงื ืืกืืืืช ืืคืืชืื.
ืกื ืืื ืจืืืืืื ืืฆืืข ืืืืืช ืคืืชืื ืืืื ื ืืื ืืงืื ืืื ืฉืจืืฆื ืืงืื Deployment ืืืืจ ืืืืฉืืื ืืื, ืืืฉืืืื ืขื ืืกืืื ืืื ืื ืืืช ืืฆืขื ืฉืงืฉื ืืกืจื ืื.1 419
# ืืจืืข ืชืฉืืืืช ืืืชื ืืืืืืช ื ืคืืฆืืช ืืืืืคืกืงืจืืคื
ืจืืฆืื ืืืื ืืก ืืืืคืกืงืจืืคื ืืคืจืืืงื ืืื ืืืจื ืืฆืืืช ืขืืฉืื ืคืจืฆืืฃ? ืื ื ืืจืืข ืชืืืืืช ืฉืืคืขืืื ืื ืื ื ืฉืืืขืื ืขื ืืืืคืกืงืจืืคื, ืืื ืืขื ืืช ืืื ืืฆื.
## ืื ื ืืืืื ืื ืืืขื ืืืืคืืกืื
ืื ื ืืชืืื ืขื ืืืชืื ืช ืืืืื ืฉืชืืื ืื ืืงืื ืฉืื ืขืืื ืืืคืขื ืืจืืฉืื ื, ืืืืื ืืื ืื ืืืขื ืืืืคืืกืื ืืืืืข ืืช ืื ื API ืฉื ืื ืืงืื ืืืขืจืืช ืืขื ืคื. "ืืฉืืื ืื ืื ื ืฆืจืื ืืืืคืกืงืจืืคื?" ืืื ืืฉืื, "ืืืื ืฉืื ืขืืื ืืืชืจ ืืืจ ืืื ืืืฉื".
ืืืฆืืื ืืืื ืื ืื ื ืืืืืื ืืืืืืจ ืืืืจ ืฉืืื ืื ืขืืื ืืื, ืืฉืืืจืืช ืฉืืื ืืืชืื ืช ืืื-ืืื-ืืขืืื ืฉืืฃ-ืคืขื-ืื-ืืืขื-ืืืืคืืกืื ืืคืขืืื ืื ืฉืื ืืืจืื ืืื ืืกื ืืืขืจืืช ืงืื ืืืืื, ืืืคืจืืืงื ืืืื ืื ืืคืฉืจ ืืงืจืื ืืืืืืจ ืื ืฉืืจืช ืงืื ืฉืืืฉืื ืืื ืืก. ืืฉืฆืจืื ืืชืงื ืืื ืืงืืข ืงืื ืฉืืจืื ืืชื ืื ืขืืื ืขืืื, ืืืื ืขืืืจ ืืฉืืฉ ืืื ืฉืงืืจื ืืชื ืืช ืืงืื ืืืืืื ืฉืื ืืขืืจืช ืคืจืืืจ ืืืืืคืืก ืืื ื ืืื.
ืื ืืกืฃ, ืืฉืืืืฉ ืืกืคืจืืืช ืืืฆืื ืืืช ืืืฉืืช ืืืื ืืืืืช ืฉืืชื ืขืืืื ืื ืืืืจ ืืขื ืคื ืืช ืื ืืืืฉืง ืฉืืื. ืืฉืืื ืืืืืืืืช ืฉื ืกืืืืช ืืคืืชืื ืืืืื ืืืกืื ืืขืืจ ืืืืื ืืืคืืคื ืืื ืืืคืฉ ืืชืืขืื ืืืกื ืืื ืืืืืืจ ืืช ืืืืจืืช ืืคืืชืื.
ืืืคืืื ืื ืืชื ืืืืจ ืื ืฉืืจืช ืงืื ืืืขืจืืช ืืืช ื API ืฉื ืื ืืกืคืจืืืช ืืืืฆืื ืืืช, ืืืืืืช ืฉื ืืืืคืกืงืจืืคื ืืืืืฆืช ืืคืชืืจ ืืฉื ืืช ืฉื ืฉื ืืฉืชื ื ืืื ืืคืจืืืงื (ืืืงืื ืฉืชืฆืืจื ืืขืืืจ ืขื ืื ืืืงืืืืช ืืื ืืืฉืชื ื ืืื ืืืคืืข) ืืืืื ืืื ืฉืืืื ืืืชืจ ืงื ืืฉื ืืช ืฉืืืช ืืืืืืจ ืืช ืืฉืืืช ืื ืืื ืื ืืคืื ืงืฆืืืช ืืืืฉืชื ืื ืฉืื ื.
## ืืืืคืกืงืจืืคื ืจืง ืืื ืืช ืืื ืื
ืืชื ืืืืช ืืกืคืจ 2 ืชืืืข ืืื ืฉืื ืฉืืืืงื ืืื ืฉืืืื ืืืื ืืก ืืช ืืืืคืกืงืจืืคื ืืคืจืืืงื ืืื ืืฉ ืืื ืืืจ ืืกืคืืง ื ืืกืืื ืขื ืืืืคืืง ืืื ืืืขืช ืฉืื ืคืืืืื ืืืฉ ืืืื ืืฉืืืจ ืืช ืื ืืืืื ืื ืืืื ืืืชื ืืฉืืขืืชืืช.
ืื ื ืืืื ืืขื ืืืงืฉืื ืื ืืกืืื ืืจ ืืืขืืจ, ืืื ื ืืื ืื ืฉืืืกืงื ื ืืื ืืื ืฉืืืื: ืืืขืื ืืื ืื ืืืืคืกืงืจืืคื ืืื ืืืืคืืง. ืืื ืื ืื ืืืืื ืืืชืจ ืืืืขื ืืชืืฆืืืช ืืืืืช ืืืจืื. ืืืงืจืื ืงืืฆืื ืืื ืืคืฉืจ ืืืืืจ ืืื ืืื esbuild ืฉืคืฉืื ืืืืง ืืช ืื ืืืืจืืช ืืืืคืืกืื ืืื ืืื (ืืื ืืืืืง ืฉืื ืืืจ) ืืืืจืืฅ ืืช ืืืืืงื ืืชืื ื IDE ืื ืคืจื ืืืื ืื.
## ืืืืคืกืงืจืืคื ืจืง ืืื ืืช ืืคืืชืื
ืื ืฉืื ืฉืืืฉืื ืืืืืคืกืงืจืืคื ืฆืจืืืื ืืขืืืจ ืขืงืืืช ืืืืื ืืขื ืฉืขืืืจืื ืืืชื ืืคืขืืื ืืฉ ืืจืืฉื ืฉืืืืื ืขืืืืื ื ืืื - ืื ืืจืืจ ืืื ืืฉืื ืงืื ืืกืคืจืื ืืืฆืื ืืช ืฉืืื ืื ืืืืจืืช ืืืคืืกืื, ืืืืขืืช ืืฉืืืื ืฉื ืืืืคืกืงืจืืคื ืืืืืืช ืืืืืช ืงืจืืคืืืืช ืืืจืื ืคืขืืื ืืืืคืกืงืจืืคื ืืืื ืืืกืชืื ืขื ืงืื ื ืืื ืืืืจื ืืืื ืืืช ืืืชืืื ื ืขืืื ืืืืจืืฉ ืืืืจืืช ืืืคืืกืื ืืืชืจ ืืืืืงืืช.
ืงืืืืืช ืืขืืืช ืืืืชืืืช ืขื ืืืืคืกืงืจืืคื ืืื ืื ืฉืขืืื ืืืชื ืืกืคืืง ื ืชืงืื ืืืงืืืืช ืฉืืื ืืืืคืกืงืจืืคื ืืืจืื ืืืชื ื ืืืชืื ืงืื ืฉืืืื ืจืืื ืื ืืืืชื ืืืชื. ืืืื ืืืช ืืืงืืืืช ืืืื ืื ืืืืขืื - ืจืื ืืืื ืืื ืฉืืืืจืื ืืืชืจ ืืช ืืืืคืกืงืจืืคื ืื ืื ื ืืืืื ืฉืืืขื ืืช ืฉืื ืื ืืืืกืกืืช ืขื ืืขืืืช ืืืืชืืืช ืืงืื ืืชืืงืื ืฉื ืืงืื ืืฉืื ืื ืืช ืืืืคืกืงืจืืคื ืืื ืืขืื ืืช ืืจืื ืฉื ืืืขืจืืช.
ื ืืื ืืืืคืกืงืจืืคื ืืืจืื ืืืชื ื ืืืฉืื ืืื ืขื ืืืืจืืช ืืืืคืืกืื ืฉืื ื ืืขื ืืืืฉืง ืฉื ืื ืคืื ืงืฆืื ืื ืืื ืฉืื ืืืื ืืืื ืืช ืืคืืชืื ืืืืื ืืงืฆืจ, ืืื ืืืขืจืืืช ืืกืคืืง ืืืืืืช ืืชืืขืืช ืขืืื ืืืจืื ืขื ืืืืืจ.
## ืืืืคืกืงืจืืคื ืื ืจืืืื ืื ืืคืจืื ื-ืื ื ืื ื API ืฉืื ื ืืืืฉ ืืื
ืืชืื ืชื ืคืจืื ืืื ื ืจืืื ืจืืืืื "ืืฉืืง" ืขื ืืงืื, ื JavaScript ืชืืื ืืืืฉื ืืืืช ืืคืืื ืืืืืืืืช ืคืฉืืืืช. ืืคืื ืงืฆืื add ืืืืืื:
function add(x, y) {
return x + y;
}
ืขืืืืช ืืืงืืคืกื ืื ืขื ืืกืคืจืื, ืื ืขื ืืืจืืืืช ืืขืืฉื ืืช ืืืืจ ืื ืืื. ืืฉืืื ืืืชืื ืืืชื ืืืืืคืกืงืจืืคื ืื ื ืืืจ ืฆืจืื ืืืฉืชืืฉ ืืืืื ืืชืืืืืื ืืื Generics ืืฉืืื ืืงืื ืืืืืง ืืช ืืืชื ืืคืงื:
function add<T extends number|string>(x: T, y: T) {
return x + y;
}
ืื ืืืืจ ืื? ืืฉืืชื ืฉืื ื ืืืกืืฃ ืืืืจืืช ืืืคืืกืื ืงืื ืืช ืืืขืจืืช ืืคืชืืื ืื ื ืฆืจืื ืืืืื ืืืื ืขื ืืืืคืกืงืจืืคื ืจืง ืืฉืืื ืืืืฆื ืืชืืืืช ื ืคืืฆืืช ืืคืฉืืืืช. ืื ืืงืจื ืืฉืืืืข ืืืชืืืืช ืืืกืืืืืช ืืืชืจ?
ืืืืืช ืืืืกืืฃ ืืืืจืืช ืืืคืืกืื ืืืจืฉ ืืืืจืืช ืืืื ืื ืขื JavaScript ืืื ืขื ืืืืื ืฉื TypeScript. ืืื ืฉืืืขืจืืช ืฉืื ื ืืขื ืืื ืช ืืืชืจ (ืืืขืจืืืช ืืื ืื ืชืืื ืืืื), ืื ืื ืืืื ืืืชืจ ืงืฉื ืืฉืื ืืืืคืกืงืจืืคื ืืื ืืืืืจ ืืืชื. ืืื ืืฆื ืฉื ื ืื ืฆืจืื ืืืืืจ ืฉืืืืืืฉ ืืืงืืจื ืฉื add ืืคืฉืจ ืืืคืขืื ืืช ืืคืื ืงืฆืื ืื ืขื ืืืจืื ืฉืื ืื ืืกืคืจืื ืื ืืืจืืืืช - ืืืฉื ืื ืืืขืชืื ืชืงืืื ืืืคืขืื ืืื:
add([1, 2, 3], [4, 5, 6]);
ืื ืืชื ืื ืืืืืื ืืืื ืื ืกืืื ืฉืฉืืื ืืืฉืงืืข ืืืืืื ืืืืคืกืงืจืืคื.1 419
# ืชืฉืชืืช ืืืืงืืช
ืืื ื ืงืืื ืืคืืชืื, ืืืชืจ ืืื ืื ืืชืงื ืืื ืื ืืืืกืืฃ ืคืืฆ'ืจ ืชืื ืืื ืืืืงื ืืื ืืช ืฉืืฆืืืชื, ืืืฉืจ ืืื ืืช ืชืฉืชืืช ืืืืงืืช.
ืืืื ื ืงืืื ืื ืืืชื ืื ืชืฉืชืืช ืืืืงืืช ืืืื ืืืืชื ืืืื ืืื ืืช ืืช ืืคืืฆ'ืจ ืื ืืชืงื ืืช ืืืื ืืืชืจ ืืืจ ืืืฉืจ ืืืขืืื.
ืืืขืื ืฉืืืจื ืืื ืื ืื ื ืืื ืื ืชืฉืชืืช ืืืืงืืช ืื ืืกืคืืง ืืืื, ืืื ืืฉืืืื ืคืขืืืื - ืื ืืฉืงืขื ื ืขืืืื ืืื ืืืช ืืืชืฉืชืืช, ืืื ืืฉืืืฃ ืื ืื ื ืืฉืงืืขืื ืืืชืจ ืืื ืืคืืชืื ืคืืฆ'ืจืื ืืชืืงืื ืืืืื (ืื ืฆืจืื ืื ืืืืกืืฃ ืืืืงื ืฉืจืง ืืืืืช ืืื).
ืืืคืชื ืงืืืื ืืื ืืืืืจ ืืืฉืคื ืืฉื ื ืืคืืกื ืืื, ืืืืืืจ ืฉ"ืชืฉืชืืช ืืืืงืืช ืืืื ืืฉืคืจืช ืงืฆื". ืื ืขืื ืชืฉืชืืช ืืืืืงืืช ืฉืืื ืืืื ืืชืื, ืฆืจืื ืืืืฉืื ืืฉืคืจ ืืืชื (ืื ืืืืชืจ ืืืืจืืง).
1 419
# ืืคืขืืช ืืืืืื ืืงืฉื ืืฉื ืืฆืจ ืชื ืืืฉ ืืคื ืชืื ืืช
ืืืืืื ืืงืฉื ืืกืคืง ืื ืื ืื ืืืฉ ื ืื ื Deployment ืืืืืืื ืืืขืจืืช ืฉืืื, ืืื ืืฉ ืืืืืกื: ืื ืื ื ืื ืจืืฆืื ืืขืฉืืช deploy ืขื ืื PR ืืืฉ ืฉืืืืื ื main, ืืื ืื ืื ื ืื ืื ืจืืฆืื ืืขืฉืืช ืืช ืืงืืืื ืืื ืืช ืืืืืฆืช ืืคืชืืจ ืื ืื ืืืื ื ืื ืืขืืื ืจืง ืืจื ืืื. ืคืืชืจืื ืืื ืงื ืืื ืืืืืื ืขื ืชืื ืืช ืฉื ืฉื tag ืฉืืืจืื ื deploy, ืืืฉื ื ืืืื ืฉืื ืชื ืฉืืชืืื ืืืืื deploy ืืืืจืื ืืงืฃ ืืืจืื ืืืืืืื ืืืคืขืื ืืงืฉื ืฉืืขืฉื deployment ืืืฉ.
ืืืจืืืจ ื Github Action ืืจืื ืื:
on:
push:
tags:
- 'deploy-*'
ืืื ืืคืฉืจ ืืืฆืืจ ืืช ืืชื ืขื ืชืืกืคืช ืฉื timestamp ืืืืืืฃ ืืืชื ืืฉืจืช ืขื ืืคืงืืืืช:
$ git tag deploy-$(date +%s)
$ git push --tags1 419
# ืื ืืืืื, ืื ื ืืืืจ ืืช find
ื ืชืื ืืืกืฃ ืฉื ืชืืงืืืช ืืื ืืืช ืืฉ ืคืจืืืงื ืืืจ. ืืืฉืืื ืฉืื ื ืืืื ืืื ืืืฆืืจ ืืชืื ืื ืชืืงืื ืชืช-ืชืืงืื ืืฉื app ืื ืืื ืืืืช, ืืื ืืฆืืื ื ืืืฆืืจ ืื ืื ืืืขืืืจ ืืช ืื ืืงืืฆืื ืืืชืืงืืืช ืฉืืื ืืชืื ืืืชื ืชืืงืื ืืชืื app. ืื ืืืชื app ืงืืื ืืคืฉืจ ืืืื ืขื ืืชืืงืื.
ืื ืขืื ืืืืืจ ื 2-3 ืคืจืืืงืืื ืืื ืืขืื ืืขืืืจ ืืื ืืื, ืืื ืืฉืืฉ ืขืฉืจืืช ืืจืื ืืืชืจ ืืืฃ ืืืฉืชืืฉ ื find.
ืืืฉืืื ืืจืืฉืื ื ืืื ืืืฆืื ืืช ืื ืชืืงืืืช ืืคืจืืืงืืื, ืืืืืจ ืืชืืงืืืช ืืจืื "ืืจืืฉืืช". ืืฉืืื ืื find ืืฆืืข ืื ื ืืช maxdepth, type ื mindepth. ืขืืืจ ืืืืื ืคืฉืืื ืฉืืืืื ืฉืืืฉ ืชืืงืืืช ืคืจืืืงืืื ืืฉืืืช a, b ื c ืื ื ืืจืืฅ:
$ find . -mindepth 1 -maxdepth 1 -type d
./a
./c
./b
ืืืืืช ืืกื ื ื type ืืคืงืืื ืืืคืืกื ืจืง ืืช ืืชืืงืืืช ืื ืื ืืื ืงืืฆืื ืืชืืงืื ืืจืืฉืืช. ืืคืฉืจ ืืกื ื ืขืื ืืืชืจ ืื ืืคื ืฉืืืช ืงืืฆืื ืฉื ืืืชื ืชืืงืืืช ืคืจืืืงืืื ืขื ืชืืกืคืช ืืชื -name.
ืืืจื ืฉืืฉ ืื ื ืืช ืชืืงืืืช ืืคืจืืืงืืื ืฆืจืื ืืื ืชืืงืื ืืืจืืฅ ืืช ืืคืงืืืืช:
mkdir app && mv * app
ืฉืืื ืื ืืกืืื ื && ืืื ืฉืชื ืืคืงืืืืช: ืื ื ืจืืฆื ืืืจืืฅ ืืช ื mv ืจืง ืื ืืฆืืืชื ืืืฆืืจ ืืช ืืชืืงืื. ืื mkdir ื ืืฉื ืื ืื ืจืื ืืืืจ ืฉ app ืืืชื ืฉื ืงืืื (ืืืจืืช ืฉืืืื ืืืืืช ืฉืืืืืจ ืืืขืืืช ืืจืฉืืืช, ืืื ืื ืืืงืจื ืืื ืืื ืืขื ืื ืกืืช ืืืขืืืจ ืืฉื ืงืืฆืื).
ืืฉืืื ืื ื find ืืฉ ืืคืชืืจ exec. ืืื ืื ื ืื ืืืื ืืืจืืฅ ืืฉืืจืืช ืืช ื && ืืชืื ื exec ืืืื ืื ื ืืจืืฅ ืขืืชืง ืืืฉ ืฉื bash ืฉืืคืขืื ืืช ืฉืชื ืืคืงืืืืช:
find . -mindepth 1 -maxdepth 1 -type d -exec bash -c "mkdir {}/app && mv {}/* {}/app" \;
ืืคื ืืืืืง ืืื ืืืืืคื ืฉื ืืืืื ืืงืื ืื ืฉื ืืื ืืงืก - ืืืืจืืช ืืืื ืืืชื ืขืืืจืช ืืชืงืฉืจ ืขื ืืืืฉื ืืื ืืืชืจ ืืืืกืื ืืื ืืืฉืืืืช ืฉืืืืช ืื ืืืืื ื ืืขืฉืืช ืืืชื ืืื ืืช.
Endi mavjud! Telegram Tadqiqoti 2025 โ yilning asosiy insaytlari 
