ToCode
Kanalga Telegramโda oโtish
ืืืคืื ืงืฆืจืื ืืืชืื ืชืื ืืืช ืื ืื ืคืจืง
Ko'proq ko'rsatish1 419
Obunachilar
+124 soatlar
-17 kunlar
-530 kunlar
Postlar arxiv
1 419
ืืื ืขืืื ืคืจืืืงื Rails ืขื ESBuild
ืืืืื ืฉื DHH ืขืืืจ ืจืืืืก ืืื ืืืืชืจ ืขื ื Build Step ืืคืฉืื ืืฉืื ืืืฃ ื HTML ืืช ืืงืืฉืืจืื ืืกืงืจืืคืืื ืืืืฆืขืืช ES Modules. ืืืืืช ืืชืืืื ืฉื ืืคืืคื ืื ื HTTP2 ืื Import maps ืืกืืคืืจ ืืื ืืคืืื ืขืืื ืื ืืื ืืคืจืืืงืื ืจืืืืก ืืืกืชืืืื ืขื JavaScript.
ืืื ืืฉืื ืื ื ืืืกืืคืื TypeScript ืืจืืืงื ืืชืืื ื ืืขืกืง ืืกืชืื ืืฉืื ืื ืื ืืืคื ืืืจืื. ืืืจืกื 7 ืฉื ืจืืืืก ืฉืืืื ืืืฉืง ืกืื ืืจืื ืืื ืืืช ืงืืฆื Front End ืฉื ืงืจื JS Bundling. ืื ืื ืื ืื ืืืคืฉืจ ืืขืืื ืขื esbuild, webpack ืื rollup ืืืฉืื ืืืชื ืืชืื ืคืจืืืงื ืจืืืืก. ืืื ืื ืฉืืืืื ื JS Bundling ืืขืืื ืฉื ืจืืืืก ืืื ืฉืืื ืงืืืฅ ืืืืจืืช ืืื ืฉืขืืื ืขื ืื ืืืืื ืืืืงืื ืื ืขืืื ื ืืืืืจ ืืช ืืื ืืืืืื ืืืื ืืช ืื ืืช ืงืืืฅ ืืืืืจืืช ืืขืฆืื ื. ืืคื ื ืืื ืฉืืืขืืช ืคืจืกืืชื ืืื ืืืจืื ืฉืืกืืืจ ืืื ืืฉืื React ื TypeScript ืืคืจืืืงื ืจืืืืก ืืฉื ืืฆืขืชื ืขื ืืกืคืจืื vite-ruby. ืืืื ืื ื ืจืืฆื ืืืจืืืช ืืื ื ืคืจืืืงื ืืืื ืืื ืืคืขื ืืขืืจืช esbuild ืืชืื ืฉืืืืฉ ื JSBundling.
ืืฆืืจืช ืืคืจืืืงื ืืืืืจืืช
ืชืืืื ืื ื ืืืฆืจ ืคืจืืืงื ืจืืืืก ืืืฉ ืขื ืืคืงืืื:
$ rails new myapp -j esbuild
ืืคืจืืืงื ืฉื ืืฆืจ ืืืื ืงืืืฅ package.json ืขื ืืืืจืช ืกืงืจืืคื ืืื ืื:
"scripts": {
"build": "esbuild app/javascript/*.* --bundle --sourcemap --format=esm --outdir=app/assets/builds --public-path=/assets"
},
ืืฉืืื ืืืคืขืื ืืช ืืคืจืืืงื ืืฉืืจืช ืืคืงืืื ืื ืื ื ืืืชืืื:
./bin/dev
ืื ืืืจื ืืืคืขืืช ืืคืงืืืืช ืืชืื ืืงืืืฅ Procfile ืฉืื ื ืืฆืจ ืืืืชื ืชืืงืืื:
web: env RUBY_DEBUG_OPEN=true bin/rails server
js: yarn build --watch
ืคืงืืืช ื js ืฉื ืืคืขืืื ืืช ืกืงืจืืคื ืืื ืืื ืืืืกืืคื ืื ืืช ืืืชื watch. ืืฆืืจื ืืืืช ืืชืืืื ืฉื js ืืืฉืื ืืจืืฅ ืืืื ืืช ืืืืฉ ืืช ืงืืฆื ื JavaScript ืื ืคืขื ืฉืืืื ืฉืื ืื ืืงืืฆืื ืืขืืจืช esbuild.
ืืฉื ืจืฆื ืืื ืืช ืืช ืืคืจืืืงื ืืคืจืืืงืฉื ื ืคืขืื:
./bin/rails assets:precompile
ืืื ืืจืืฅ ืืืืืืืืช ืืช ืกืงืจืืคื ื build ืืงืืืฅ ื package.json. ืืืื ืคืงืืืช ืืื ืื ืฉืืืืืจืช ืฉื ESBuild ืืื ื ืืช ืงืืฆื ื JavaScript ืืืฉืืืจ ืืืชื ืืชืื ืชืืงืืืช app/assets/build. ืฉื ืืืกืืฃ ืืืชื sprockets ืืืื ืงืืืฅ ืืืืืจืืช app/assets/config/manifest.js. ืื ืชืืื ื:
//= link_tree ../images
//= link_directory ../stylesheets .css
//= link_tree ../builds
ืืขืืจืช sprockets ืืงืืฆืื ืืืขืชืงื ืืชืืงืืืช public ืืื ืืงืืื ืชืืกืคืช ืฉื digest ืืฉืื. ืืืจื ืื ืืื ืื ื ืืืฆื ืืช ืืงืืฆืื ืืืืื ืฉื:
$ ls public/assets/*.js
public/assets/actioncable-1c7f008c6deb7b55c6878be38700ff6bf56b75444a086fa1f46e3b781365a3ea.js
public/assets/actioncable.esm-06609b0ecaffe2ab952021b9c8df8b6c68f65fc23bee728fc678a2605e1ce132.js
public/assets/actiontext-78de0ebeae470799f9ec25fd0e20ae2d931df88c2ff9315918d1054a2fca2596.js
public/assets/actiontext.esm-328ef022563f73c1b9b45ace742bd21330da0f6bd6c1c96d352d52fc8b8857e5.js
public/assets/activestorage-503a4fe23aabfbcb752dad255f01835904e6961d5f20d1de13987a691c27d9cd.js
public/assets/activestorage.esm-b3f7f0a5ef90530b509c5e681c4b3ef5d5046851e5b70d57fdb45e32b039c883.js
public/assets/application-c3ea1831495badf025afd8fd7722fb857c51927f0cc017c366fda52f0d926be2.js
public/assets/common-4e2a87d110376bedbe6f1edea889eb9c368a64a988cab5d3d8527dafd52dc067.js
public/assets/hello-7301560822385b452fd44614e6fc857b520f5082b343eed0dea9d5d2812db9e4.js
public/assets/manifest-dad05bf766af0fe3d79dd746db3c1361c0583026cdf35d6a2921bccaea835331.js
public/assets/stimulus-autoloader-c584942b568ba74879da31c7c3d51366737bacaf6fbae659383c0a5653685693.js
public/assets/stimulus-f75215805563870a61ee9dc5a207ce46d4675c7e667558a54344fd1e7baa697f.js
public/assets/stimulus-importmap-autoloader-db2076c783bf2dbee1226e2add52fef290b5d31b5bcd1edd999ac8a6dd31c44a.js
public/assets/stimulus-loading-3576ce92b149ad5d6959438c6f291e2426c86df3b874c525b30faad51b0d96b3.js
public/assets/stimulus.min-dd364f16ec9504dfb72672295637a1c8838773b01c0b441bd41008124c407894.js
public/assets/trix-686ab55c2aea8035a7f728b61ec7afedfe857f70d6279ab453da775b7469e9e8.js
public/assets/turbo-84e828a0e6f1f9418a277df89df877e9a30524438cf8dc007c066655017a44bc.js1 419
ืื ?? ืื ืื ืืืชืจ ืืื, ืืื ืื ืืฉืชืืฉืื ืื ืืืชืจ?
ืืืคืจืืืจ
?? ื JavaScript, ืื ืืฉืื ืืจืฉืื Nullish Coalescing operator, ืืื ืืืจืกื ืืืืื ืืช ืืืชืจ ืฉื ||. ืืื ืืคืืืช ืืืืื ืืช ืืืชืจ ืืืืง ืืฉืืขืืชื ืืืืฆืืื. ืขืืืจ || ืืขืจื 0 ื ืืฉื ื"ืฉืงืจ" ืืขืืืจ ?? ืืื ื ืืฉื ื"ืืืช". ืื ืืืืจ ืฉืขื || ืืฉ ืื ื:
> const items = [10, 20, 30, 40]
undefined
> const firstIndexOfTenOrFifty = items.indexOf(10) || items.indexOf(50)
undefined
> firstIndexOfTenOrFifty
-1
ืืขืืืชื ืขื ?? ืื ืื ื ืืงืืืื ืืช ืืืื ืืงืก ืื ืืื ืฉื ืืืกืคืจ 10:
> const items = [10, 20, 30, 40]
undefined
> const firstIndexOfTenOrFifty = items.indexOf(10) ?? items.indexOf(50)
undefined
> firstIndexOfTenOrFifty
0
ืื ืืื ืืื ืืืช ืื ืื ื ืืืขื ืื ืจืืืื ืืืชื ืืงืื? ืืื ืจืขืืื ืืช:
1. ืื ืื ื ืคืืืช ืืืืจืื ืืคืืืช ืจืืืืื ืืืฉืชืืฉ ืืชืืืืจ ืืืฉ.
2. ืื ืื ื ืืืฉืฉืื ืฉืืื ืฉืืงืจืื ืืช ืืงืื ืื ืืืืจืื.
3. ืื ืื ื ืื ืืืืืื ืืืืื ืืคืืคื ืื ืืื ืืขืืื (ืขืืื ืืื ืืงืื).
4. ืืืืื ืจืื ืืืื ืื ืื ื ืืืืงืื "ืื" ืืื ืขืจืืื ืืืืืื ืื, ืื ืื ืื ืืื ืืฉื ื.
ืื ืืขืชืื? ืืืืื ืืืื ืืชื ืืฉืชืืฉืื ืืฉื ื ืกืืื ื ืืฉืืื? ืืืื ืืชื ืื ืืฉืชืืฉืื ืื ืืืชืจ?1 419
ืืชื ืขืื ืชืฉืื ืขื ืื
ืื ื ืขืืืจ ืืืงืื ืืฉืืจื ืืขืจืืช ืจืืืืก. ืืืชืืื ื ืจืืชื ืืืืืื ืืื ืฉืกืืืื ื ืืช ืื ืฉืื ืืื ืืืืจืกืืืช ืืขืืืื ืืคื ืื ืืืจืืื ืืฉืืืจืื ืืืืข ืืืืง ืืงืฉื - ืื ืคืขื ืฉืืชืื ืช ืื ืืชืื ืชืช ืืคืจืืืงื ืืฉืื ืฉืื ืืืืขืื ืืืชืจ ืืื ืืืชืืขืื ืืื ื ืื ืื ืื ืืชืืืื ืืื ืืืชืืืื ืขื ืืฉืื ืฉื ืชืคืก ืืขืื ืืื ืืืืืื ืฉื ืืกืคืจืื ืืคืื ืืืืืช ืืกืข ืฉื ืคืืชืื ืืืืฉ ืฉื ืืื ืื ืื, ืื ืืืืจืกื ืืืืฉื ืฉื ืืกืคืจืื ืื ืืชืืืื ืืจืขืืื ืืืชืืืื ืืืคื ื ืฉื ืชืืื.
ืืื ืืืืจืื ืฉืกืืืื ืืืชื ื ืขื ืขืืฉืื:
1. ืื ืื ืื ืื ืื ืืืช ื JavaScript/CSS ืืฉืชื ื ืืืื ืืจืืืืก ืืฉื ืื ืืืืจืื ืืช. ืืฉืืคืจืืืงื ื ืืชื ืืืงืืจ ืื ืืืชื ืืจื ืกืื ืืจืืืช ืืฉืื FrontEnd App ืขื ืงืื ืจืืืงื ืืืื ืื ืคืจืืืงื ื ืจืื ืืืจืช.
2. ืฉืืืืฉ ื Composite Primary Keys ืืขืืจ ืื ื ืชืื ืืจืืืืก. ืืืื ืืื ืืืจ ื ืชืื ืืืื ืืฉ ืืขืืื ืืช ืืงืื ืฉืืขืฉื ืฉืืืืฉ ืืื ืื ืื ืืืืฉ (ืื ืืคืืชืจืื ืืืฉื ื ืฉืืจ).
3. ืื ืื ืื ืงืืฆืื ืืฆืืจืคืื ืืคื ืกืื ืืจืื ืืจืืืืก, ืื ืฉืืืืื ืืฉื ืืช ืืช ืืื ืื ืื ืืงืื ืืืขืืื ืืช ืื ืชืื ืื ืืืกืืก ืื ืชืื ืื ืขื ืืงืืฆืื ืฉืืืจ ืฉืืืจืื ืืืขืจืืช.
ืืกืืฃ ืืื ืืขืืื ืืื ืืืชืจ ืื ืืจืืจ, ืืื ืืื ืชืืื ืืฉืืืจืื ืืื ืืื ืชืืืืจืช ืืืื ืืื ืขืืืฃ ืืฉืืจื ืืฆืขืืื ืงืื ืื ืืชืืื ืืขืืื ืืฆืืจื ืกืื ืืจืืืช.
1 419
ื Killer Feature ืืืืฉ ืฉื node.js (ืื: ืืื ืื ืืกืืฃ ืฉื ืืื ื?)
ืื ืจืืืง ืืืื ืื ื ืืื ืืืคืขืื ืงืืฆื TypeScript ื node.js, ืื ืืคื ืืืื ืื ืืฉื ืืืืืืื ืฉื ื ืื (ืืืจ ืขืืื ื Nightly). ืืื ืืืืฉืื ืฉื ืืคืืฆ'ืจ:
1. ืืื ืืืืงืช ืืืคืืกืื ืืืจืฆื. ืื ืืื ืื ืืืชื ืืืืช ืฉื deno, ืืื ืืื esbuild ืืคืจืื ื ืื ื. ืืกืืื ืืื ืฉืืื ืืขื ืืืืืง ืืืคืืกืื ืืคื ื ืืจืฆื, ืืขืืืฃ ืืืฉืชืืฉ ืืืืคืืกืื ืืชืืจ ืืืคืื ื IDE ืื ืืืืืงื ืืืืื ืืืืง ืืืจืฆืช ืืืืงืืช ืื CI/CD.
2. ืืื ืชืืืื ืืืื ืืช ื npm ืืื ืฉืืฉ ืืืื ื, ืืืืื ืื ืฉืืฉ ืืืืื ืฉืืื ืืืืืช TypeScript ืฉืืืืขื ืขื ืืืืจืืช ืืืืคืืกืื. ืืคืืฆื ืืืืืืช ืืืืืื ืืืชืื ืงืืืฅ ืืืคืืกืื ืืืืคืืฅ ืืืชื, ืื ืืืืืื ืืืคืืฅ ืืช ืืืืคืืกืื ืืืกืืจืช ืืืืื ืืืฆืื ืืช ืื ืื ืฉืืจืฆื.
ืืื ืืืช ืืื ืื ืกืคืง ืฉืืคืฉืจืืช ืืืจืืฅ TypeScript ืืื ืฉืื ืกืคืจืืื ืืืฆืื ืืช ืชืืคืื ืืช node ืืืจืื ืืืชืจ ืชืืจืืชื ืืชืืฆืื ืืจืื ืืืืืืืจ ื deno ื bun. ืืืื ืชื ืฉืืืงืืกืืกืื ืฉื node ืืื ืขืืืื ืืืืื ืืืืชืจ ืืื ืื ืจืื ืืืฉืืจ, ืืืืชืจืื ืืืจืืื ืฉื ืืื ื ืืื deno deploy ืืฉื bun ืื ืืืืฆืืขืื.
1 419
ืฉืืืช ืืืขืืื ืืคืืจืขื ืืช
ืืกืคืจืื swr ืืฉืืฉืช ืืืฉืืืช ืืืืข ืืืจืฉืช ืืืืฉืื ืจืืืงื. ืืฉืืืืฉ ืืืกืืกื ืืงืื ืขืฉืื ืืืืจืืืช ืื:
import React from "react";
import useSWR from "swr";
const fetcher = (url) => fetch(url).then((res) => res.json());
export default function App() {
const { data, error, isLoading } = useSWR(
"https://api.github.com/repos/vercel/swr",
fetcher
);
if (error) return "An error has occurred.";
if (isLoading) return "Loading...";
return (
<div>
<h1>{data.name}</h1>
<p>{data.description}</p>
<strong>๐ {data.subscribers_count}</strong>{" "}
<strong>โจ {data.stargazers_count}</strong>{" "}
<strong>๐ด {data.forks_count}</strong>
</div>
);
}
ืงืฉื ืืจืืืช ืืืงืื ืืื ืืืฅ ืืืืืช ืืืืข ืืืจืฉืช ืืงืจืืื ื useSWR ืื ืืืืืช ืืขืืืื ืืืืืืื ืฉื ืืืืืข ืืื ืืืืื ืืช ืฉืืื ืืืืื ืืืืืืื ืืขืช ืฉืื ืื ืคืืงืืก. ืืืื ืืืืขืื ืืืื ืฉืงืฉื ืืืชืจ - ืืฉืชืืฉืื ืืชืืื ื ืื ืฉืืื ืคืขื ืืืจืื ืืฉืชื ืื ืืื ืขื ืืืกื, ืืืจื ืืืคืืฉ ืื ืื ื ืืืืื ืฉื"ืืื ืคืขื" ืืื ืงืืจื ืืฉืขืืืจืื ืืืืื ืืืจ ืืืืืจืื ืืืืื ืฉื ืืืคืืืงืฆืื ืืืฉืื ืื ื ืืจื ืื ืืฉืจืช ืืืืืจ ืืืืข ืงืฆืช ืฉืื ื ืื ืคืขื. ืืคืืื ืืืืืืช ืืงืื ืฉืืืืงืชื ืื ืืืื ืืืืืช ืืืื ืืืืื ืืืฉืชืืฉืื ืืฉืื ืขืืืจืื ืืื ืืืื ืืช ืืคืชืืื ืืกืคืจ ืืืืืืื ืฉื ืจืืคื ืืฉืชื ื, ืฉืื ืืืืจ ืืฆืืื ืืื ืืฉืจืช ืฉืืื ืืืืข ืืงืจืื ืื ืืคืืื ืืกืืจ ืืงืจืื.
ืื ืขืืฉืื? ืชืฉืืื ืืฉืืืข ืฉ SWR ืืืืขื ืขื ืขืื ืคืื ืงืฆืื ืืฉื ืืืืคืื useSWRImmutable. ืืื ื ืืขืื ืืคื ืืชืืขืื ืืืงืจืื ืืื ืืืฉืื (ืืืืืจ ืืืืจ ืฉืื ืื ื ืืงืืืื ืืืฉืจืช) ืืขืืื ืื ืืฉืชื ื, ืืืื SWR ืื ืื ืกื ืืฃ ืคืขื ืืืฉืื ืืืืฉ ืืช ืืืืืข ืขื ืืขืช ืขืฆืื.
ืืฉืืื ืืืืืื ืฉื ืฉืืจื ืืื ืืื ืืงืจืื ืืคืื ืงืฆืื useSWRImmutable ืืฉืืจืืจ ืฉืืื ืฉืื ืืืืืืื ืฉืฆืจืืืื ืืืคืขืื ืืืชื ืื ืืื ืฉืืืฉืื ืฉืื ืืืฉืืื ืืืฉืจืช ืืื ืื Immutable...1 419
ืื ืฉืืคืฉืจ ืืชืงื
ืืคื ืืชืคืืกื ืืจืืืืช ืืืื ืืืืืช ืฉื ืืชืื ืชืื (ื ืื ื'ืืช, ืืคื ืฉืืืื ืื ืืืืืขืืช ืืืจืืฉืื) ืืื ืืืืจืื ืฉืืืื ืืืกืชืื ืขืืืื ืืฉืื ืื ื ืืืืขืื ืืืขืจืื ืืชืื ืช ืื ืืชืื ืชืช:
1. ืืืืืืช ืืืืืจ ืกืืืง ืืื ืืืืื ืืชืืื ืืืขืื ืืืืฆืืืง ืืช ืืืืืจื.
2. ืืืืืืช ืืคืชืืจ ืืขืื ืืืจ ืืชืื ืืกืืืง ืืืื ืืืืื ืืจืืืื ืื.
3. ืืืืืืช ืืืืื ืก ืืงืื, ืืชืงื ืื ืืืจืืื ืืืชื ืืื ืืฉืืืจ ืืืจืื ืงืืืืื.
4. ืืืืืืช ืืืืืช ืืขืืืช ืืืจ.
5. ืืืืืืช ืืืืืจ ืืืื ืืกืคืจ ืืืืจื ืืืืืช ืืช ืืคืืชืจืื ืืืขืื ืืืืชืจ.
ืืื ืื ืืืืืืืช ืขืืืื ืื ืื ื ื ืืื ืื ืืจืืืื ืืช ืขืืืื ืืืื ืืืืืืืช ืฉืืชืื ืชืื ืจืืื ืื ืกืื ืืฉืคืจ. ืืืขืื, ืื ืืืงืจื ื ืืกืืชื ืืฉืคืจ ืืืืืืช ืืื, ืืื ืฉืื ืืืื ืงืฉื. ืืื ืกืคืจ ืฉืืกืืืจ "ืืื ืืคืชืืจ ืืขืืืช ืืืจ" ืืืื ืฉืืฉ ืื ืืืฉ ืขืืืจืื. ืื ืืืืืื ืืืืช ืืืื ื ืื ืืช ืขื ืืืื ืืขื ืื ืืกืืื, ืืชื ืื ืฉืื ืื ื ืืืืขืื ืื ืฆื ืืช ืืืื ืืื ืืกืืื ืืฆืืจื ื ืืื ื. ืืืืืื ืืืจืืช ืืื ืฉื ืขืืื ืืฆืืจื ืืงืฆืืขืืช ืืืชืจ ืืืืจื ืืื ืืืชื ืืืืืืช ืฉืงืฉื ืืฉืคืจ ืืฉืชืคืจื ืืขืฆืื. ืืืจื ืงืืืื ืืื ืืฉืื ืื ืืชืืืื ืืืงืฆืืขื:
1. ืืืืืืืืช ืืืฉืืืจ ืงืื ื ืงื ืืืจื ืฉืคืืชืจืื ืืขืื.
2. ืืืืืืืืช ืืืืื ืืขืืืง ืื ืฉืืจืช ืงืื ืฉืื ืื ื ืืื ืืกืื ืืืขืจืืช, ืื ืื "ืื ืขืืื".
3. ืืืืืืืืช ืืืคืฉ ืืงืจื ืงืฆื ืืืืคื ืืื, ืื ืืฉื Happy Path ืืืจ ืืชืื.
4. ืืืืืืืืช ืืืคืฉ ืืื ืืจืื ืคืขืืื ืืื ืฉืืคืฉืจ ืืืื ืืืืืจ ืืช ืืืืื ืืืืชืจ.
5. ืืืืืืืืช ืืื ืืช ืชืืืืืื ืฉืืขืืจื ืื ืืืชืื ืชืื ืฉืืืืื ืืืจืื ื.
6. ืืืืืืืืช ืืืคืฉ ืืงืืืืช ืขืืืื ืืืชืืจืื ืืฉืืชืคืื ืฉืืคืฉืจ ืืืืื ืืื.
ืืืืืืืช ืืืฆืืื ืืช ืืืืจื ืืื ืืื ืืืจื ืืืืืื ืืืืืืื ืืืชืงืื.
1 419
ืืกืคืจ ืฉืื ืกืืืืชื
ืืืื ืืืกืืกื ืฉื ืืืืื ืืจื ืืจืืืื - ืืืชืจ ืืขืืื ืกืคืจ, ืืกืืจ ืืขืืื ืืช ืืืจืื. ืื ืืชืืืช ืืงืจืื ืกืคืจ ืขื SQL ืืื ืืืืื ืืช ืืืื ืืืืืื ืืืืืืช ืฉืืกืคืจ ืืฉืขืื ืืื ืฉืื ืืขืื ืืขืืืจ ืืืืื ืืจื ืงืืจืก, ืืจื ืชืจืืื, ืืจื ืฆืคืื ืืืจืฆืืืช ืืืืืืื, ืืจื ืงืจืืืช ืชืืขืื ืื ืืื ืฉืืื ืืืจืช. ืื ืฉืืฉืื ืื ืืืืฉืื ืืืืื ืืช ืื ืืฉื ืืฆื ืฉืขื ืืืื (ืื ืืื ืฉืชืื ื ืช ืืงืจืื ืืช ืืกืคืจ).
ืื ื ืขืื ืืื, ืขื ืืืืฉืื ืืจืืืื ืืืื-
1. (ืืฉืืืืืื ื ืืฉื ืืจื ืคืืชืื ืคืจืืืงื) ืืืชืจ ืืขืืื ืคืจืืืงื, ืืกืืจ ืืขืืื ืืช ืืงืืืื. ืืืืืฉ - ืฉืืื ืื ืฉืืคืจืืืงื ืืฉ ืฉืืืื. ืื ืืคืฉืจ ืืืชืงืื ืื ืขืืฉืื ืจืง ืืชืืืืช ืฉื ืคืจืืืงืืื (ืื ืจืง ืกืืคืื).
2. (ืืฉืืืืืื ื ืืฉื ืืจื ืงืืจืก) ืืืชืจ ืืขืืื ืชืจืืื, ืืกืืจ ืืขืืื ืืช ืืงืืจืก. ืืื ืคื ื ืฉืื ืื ืฉืื ืื ื ืื ืจืืฆืื ืืืื ืขื ืื ืืชืจืืืืื ืฉืงืฉืืจืื ืืคืจืง ืืกืืื, ืืื ืืื ืฉืื ืืขืื ืืงืืช ืืื ืงืืจืกืื ืืืขืฉืืช Mix & Match ืืชืจืืืืื ืืงืืจืกืื ืฉืื ืื.
3. (ืืฉืื ืกืื ืืืฉืชืคืจ ืืขืืืืช ืฆืืืช) ืืืชืจ ืืขืืื ืืช ืืงืืืฆื, ืืชื ืื ืฉืืืฆืืื ืงืืืฆื ืืืจืช ืืืงืื. ืืืืืจ ืืืฉืื ืืฉืืืืืื ืขืืืืช ืฆืืืช ืืื ืืืชืืื ืขื ืืื ืฉืืืชืจ ืชืคืงืืืื ืืชืื ืืงืืืฆื.
1 419
ืืืค ืกืงืืื: ืฉืจืช REST API ืคืฉืื ืขื cask
ืื ืืกืืื ืืจืืฉืื ืฉืื ืืืชืื ืฉืจืช API ืืกืงืืื ืืื ืขื ืกืคืจืืื ืืฉื Tapir. ืืคืืจ ืืงืกืืื, ืืฉ ืื ืืืื ืชืืขืื ืืืจืื ืืืืืืช ืืชืงืืืืช, ืืื ืืืืงื ืืืืจืื ืืคืฉืืืื ืืฆืืชื ืคืขืจืื ืืชืืขืื ืืื ืืคืื ืงืฆืืื ืืืืืช. ืืืฉื ืืืคืืฉืื ืืืื ืืืชื ืืกืคืจืื ืืฉื cask ืขืืื ืื ื ืจืืฆื ืืกืคืจ ืืืื. ืืื ืงืืื ืืงืื:
package restapi
import cask._
import cask.model.{Request, Response}
import io.circe._
import io.circe.generic.auto._
import io.circe.syntax._
case class Demo(text: String)
object MyServer extends cask.MainRoutes {
val JsonCorsHeaders: Seq[(String, String)] = Seq(
"Content-Type" -> "application/json",
"Access-Control-Allow-Origin" -> "*",
"Access-Control-Allow-Methods" -> "GET, POST, PUT, DELETE, OPTIONS",
"Access-Control-Allow-Headers" -> "Origin, X-Requested-With, Content-Type, Accept, Authorization"
)
@cask.options("/*")
def options() = {
cask.Response(
"",
headers = JsonCorsHeaders
)
}
@cask.route("/", methods = Seq("get"))
def hello() = {
cask.Response(
Demo("hello").asJson.toString,
headers = JsonCorsHeaders
)
}
initialize()
}
ืืงืื ืืฆืจ ืืืืืงื ืฉืืคืฉืจ ืืืจืืฅ ืืืชื (ืื ืฆืจืื ืืืืกืืฃ ืืื main ืื ืฉืื ืืืจ), ืฉืืคืขืื ืฉืจืช ืืื ืขื ื ืชืื ืืื - ืจืง ืื ืชืื ืืจืืฉื, ืฉืืืืืจ ืชืืื ืืืืืงื JSON ืขื ืืคืชื ืืฉื text ืืืขืจื hello. ืืื ืืืืืจ ืื ืกื ืฉื ืืืชืจืืช ืฉืืืืจืชื ืขืืืจ CORS, ืืื ืืืื ืืื ื ืชืืืื ืืคืฉืจ ืืืฉืชืืฉ ืืืืชื ืกื ืืืชืจืืช ืืืืื. ืื ืืกืฃ ืืงืื ืืืืืจ ืืืคืื ืื ืจื ืืืชืืืช OPTIONS, ืฉืื ืืฉืืื ื CORS ืฉืฉืืืืช ืจืง ืืช ืืืืชืจืืช ืืื ืฉืืคืืคื ืื ืืืืื ืืงืื ืืืืข ืืฉืจืช ืื ืืื ืืืืืื.
ืืฉืืื ืืืชืงืื ืืช Cask ืืฉ ืืืืกืืฃ ื build.sbt ืืช ืืฉืืจื:
libraryDependencies += "com.lihaoyi" %% "cask" % "0.9.1"
ืืื ืื ื ืืืืข ืฉืืืืชื ืืืชืืื ืืื ื node.js, ืคืืืชืื ืื ืจืืื ืืขืฉืจ ืืงืืช. ืืกืงืืื ืื ืืงื ืื ืฉืขืชืืื, ืืขืืงืจ ืืืื ืืขืืืช ืืชืืขืื ืืืืชืจ ืืื ืกืคืจืืืช ืฉื ืฉืจืชื ืืื. ืืื ืฉืคื ืืฉ ืื ืืช ืืืกืจืื ืืช ืฉืื.1 419
ืืื ื ืืกืืชื: Webvm.io
ืฆืจืืืื ืกืืืืช ืืื ืืงืก ืืชืจืืืืื? webvm.io ืืื ืืื ืืคืจืืืงืืื ืืืขื ืืื ืื ืฉืจืืืชื ืืืืืจ ืืื. ืื ืืงืื ืืช Debian ืืืจืืฆืื ืืืชื ืืืคืืคื ืืชืืจ ืืคืืืงืฆืืืช Client Side ืืืื ืืจื ืืื ืืกืืืื, ืืื ืื ื ืื ืื ืื ืฉืืืคืฉืจ ืืื ืืช ืื Dockerfile ืืืืื ืช ืืื ืืงืก ืฉืจืฆื ืืืคืืคื. ืืกืคืืง ืืืืื ืก ืืืื ืง ืืื ืืืชืจืฉื ืืื ื ืขืื ืืื ืืืจืื ืฉืืืืชื ืืคืจืืืงื:
1. ืืืืื ื ืืืฉืืื ืืจืืฅ ืื ืืืื (ืืื, ืื ืขืื ืืืคืืคื ืืืืง). ืืคืืื ืืฉืขืืจืชื ืืืฆื ืฉืื ื ืืืคืขืืชื ืืช ืืืืฉื ืฉืื ืืืจื ืฉืขืืช ืืื ืืืจ ืืืืชื ืืฆื. ืืื ืื ืืฉืืื ืฆื ืฉืจืช.
2. ืืจืื ืืืจืื ืขืืืืื ืืื ืืื. ืืคืขืื ืจืืฉืื ื ืฉื ืคืงืืื ืืื ืืืืืช ืืืืืื ืืืืจื ืื ืืื ืจืง ืงืฆืช ืืืืืช.
3. ืืฉ ืชืืืื ืืจืฉืช ืืจื ืฉืืจืืช ืฉื ืงืจื Tailscale. ืื ื ืืืื ืฉืืื ืชืืื ืืฆืืืชื ืจืง ืืืืจ ืืช ืืืืื ื ืืืชืืืช IP ืฆืืืืจืืช, ืืื ืขืืืื ืื ืืืืืข ืืืื ื SSH ืื ืืฆืืช ืืื ื. ืฉื ื ืืืืจืื ืืืืจืื ืืืืืช ืืคืฉืจืืื.
4. ืืฉ ืชืืืื ืืขืืืื ืืชืืจ root (ื ื ืื ืจืฅ ืืืคืืคื ืื ืืื ืฉืื ืืขืืืช ืืืืื). ืคืฉืื ืืคืขืืืื su ืืืืชืืื ืืช ืืกืืกืื
password.
5. ืืฉ ืขื ืืืืื ื ืืืจ ืืื ืชืืื ืืช ืืื python, perl, gcc, vim, ruby. ืืืื ืฉืื ืืฆืืืชื ืืืคืขืื ืืช ืืืืืืจ ืืจืฉืช ืื ืื ืืฆืืืชื ืืืชืงืื ืชืืื ืืช ืืืจืืช.
6. ืฉืื ืืืื ื crontab ืฉื ืืกืืชื ืืขืฉืืช ืื ื ืืชืื ืืื ืื ื ืื ืื ืฉืืืง ืืืงืืฆืื ืื ืืงืจืืื ืืืื. ืื ืืืชื ืืขืื ืืืฆืืจ ืงืืฆืื ืืชืืงืืืช ืืืืช, ืืืคืขืื ืชืืื ืืช ืื ืื ืืฉืืื ืืืจืช ืฉื ืืฉืชืืฉ ืจืืื.
ืกื ืืื ืื ืืชื ืื ืกืื ืืืืื ืืื ืืงืก ืืืืืืื ืขืืืื ืืฉืืจืช ืืคืงืืื, ืืืืคืฉืื ืกืืืืช ืชืจืืื ืฉืคืฉืื ืชืขืืื ืืืืืฆืช ืืคืชืืจ ืืชืจ webvm ืืื ืืคืืชืจืื ืืืื ืืืืืืจ ืืืืชืจ ืฉืชืืืื ืืืฆืื. ื ืกื ืืฉืชืคื ืืืืืืช.
Endi mavjud! Telegram Tadqiqoti 2025 โ yilning asosiy insaytlari 
