{"id":492097,"date":"2026-08-25T09:14:25","date_gmt":"2026-08-25T09:14:25","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=492097"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=492097","title":{"rendered":"\u041c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 Vite, TS, ESM \u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u00absubpath imports\u00bb"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><a class=\"anchor\" name=\"targets\" id=\"targets\"><\/a><\/p>\n<h3>\u0426\u0435\u043b\u0438<\/h3>\n<ul>\n<li>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043f\u0430\u043a\u0435\u0442\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Node.js <code>subpath imports<\/code>, \u043a\u0430\u043a \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u043e\u0432: <\/p>\n<ul>\n<li>\n<p>\u0431\u0435\u0437 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 tsconfig <code>path aliases<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 VSCode IntelliSense &#8212; \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442, \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0438 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 <code>conditional exports<\/code> &#8212; \u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 dev-\u0440\u0435\u0436\u0438\u043c\u0435, \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b Vite(HMR) \u0438 VSCode(IntelliSense) \u0441 \u0436\u0438\u0432\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e API \u043c\u043e\u0434\u0443\u043b\u044f (index.ts) \u0447\u0435\u0440\u0435\u0437 subpath imports.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/d9\/f9\/c4\/d9f9c47dc6297b0afdd85394a47120de.png\" alt=\"\u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u044b \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 (package.json + \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0430).\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/d9\/f9\/c4\/d9f9c47dc6297b0afdd85394a47120de.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/d9\/f9\/c4\/d9f9c47dc6297b0afdd85394a47120de.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u044b \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 (package.json + \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0430).<\/figcaption><\/div>\n<\/figure>\n<p><a class=\"anchor\" name=\"contents\" id=\"contents\"><\/a><\/p>\n<h3>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/h3>\n<ul>\n<li>\n<p><a href=\"#targets\" rel=\"noopener noreferrer nofollow\">\u0426\u0435\u043b\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#tldr\" rel=\"noopener noreferrer nofollow\">\u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u0438\u0442\u043e\u0433<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#intro\" rel=\"noopener noreferrer nofollow\">\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#terminology\" rel=\"noopener noreferrer nofollow\">\u0422\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#tools\" rel=\"noopener noreferrer nofollow\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#workspaces\" rel=\"noopener noreferrer nofollow\">\u0421\u043e\u0441\u0442\u0430\u0432 \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#tools-features\" rel=\"noopener noreferrer nofollow\">\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#common-settings\" rel=\"noopener noreferrer nofollow\">\u041e\u0431\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438<\/a> <\/p>\n<ul>\n<li>\n<p><a href=\"#vite\" rel=\"noopener noreferrer nofollow\">Vite<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#typescript\" rel=\"noopener noreferrer nofollow\">TypeScript<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#vscode-intellisense\" rel=\"noopener noreferrer nofollow\">VSCode IntelliSense<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#conditional-subpath-exports-settings\" rel=\"noopener noreferrer nofollow\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 <code>conditional subpath exports<\/code> \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432\/\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a<\/a> <\/p>\n<ul>\n<li>\n<p><a href=\"#jit-settings\" rel=\"noopener noreferrer nofollow\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 JIT \u043f\u0430\u043a\u0435\u0442\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#compiled-packages\" rel=\"noopener noreferrer nofollow\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#conditional-subpath-imports-settings\" rel=\"noopener noreferrer nofollow\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <code>conditional subpath imports<\/code><\/a> <\/p>\n<ul>\n<li>\n<p><a href=\"#tsserver-and-subpath-patterns\" rel=\"noopener noreferrer nofollow\">\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b TSServer \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 (subpath patterns)<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#dir-modules\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e API \u043c\u043e\u0434\u0443\u043b\u044f (index.ts) \u0447\u0435\u0440\u0435\u0437 subpath imports<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#prebuild-typechecking-settings\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 tsc \u043f\u0435\u0440\u0435\u0434 \u0441\u0431\u043e\u0440\u043a\u043e\u0439<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#notes\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#conclusion\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#links\" rel=\"noopener noreferrer nofollow\">\u0421\u0441\u044b\u043b\u043a\u0438<\/a> <\/p>\n<ul>\n<li>\n<p><a href=\"#doc-links\" rel=\"noopener noreferrer nofollow\">\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#posts-links\" rel=\"noopener noreferrer nofollow\">\u0421\u0442\u0430\u0442\u044c\u0438<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"tldr\" id=\"tldr\"><\/a><\/p>\n<h3>\u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u0438\u0442\u043e\u0433<\/h3>\n<ol>\n<li>\n<p>\u041a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u043c\u0435\u0436\u0434\u0443 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 <code>subpath imports<\/code> \u0434\u043b\u044f Vite \u0438 TypeScript \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c customConditions \u0441 <code>fallbacks array<\/code> \u0434\u043b\u044f TS. Vite \u0447\u0438\u0442\u0430\u0435\u0442 <code>default<\/code> \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0410\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442 (TSServer. <strong>\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0432 tsgo<\/strong>) \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 <code>type<\/code> \u0432 \u0438\u043c\u043f\u043e\u0440\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f: <\/p>\n<ul>\n<li>\n<p>\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043e\u043f\u0446\u0438\u0438 VSCode <code>js\/ts.preferences.preferTypeOnlyAutoImports<\/code><\/p>\n<\/li>\n<li>\n<p>\u0438 \u0437\u0430\u043c\u0435\u043d\u043e\u0439 <code>verbatimModuleSyntax<\/code> \u043d\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 ESLint \u0432 dev-\u0440\u0435\u0436\u0438\u043c\u0435.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0410\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e API \u043c\u043e\u0434\u0443\u043b\u044f (<code>index.ts<\/code>) \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 extensionless \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<\/ol>\n<p><a class=\"anchor\" name=\"intro\" id=\"intro\"><\/a><\/p>\n<h3>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043c\u0435\u0442\u043e\u0434\u044b \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0445 \u043c\u0435\u0436\u0434\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 ESM.<\/p>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0432\u0435\u0441\u043e\u043c\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u043d\u0435 \u0431\u044b\u043b\u043e. \u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u043c\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0430\u043c\u0438. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b, \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c extensionless \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438: \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e API \u043c\u043e\u0434\u0443\u043b\u044f (<code>index.ts<\/code>).<\/p>\n<p>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0445 \u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0435\u0441\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 <a href=\"#posts-links\" rel=\"noopener noreferrer nofollow\">\u041c\u0430\u043a\u0441\u0438\u043c\u0430 \u0417\u0435\u043c\u0441\u043a\u043e\u0432\u0430 \u0438 \u0412\u0438\u0442\u0430\u043b\u0438\u044f \u041f\u043e\u0442\u0430\u043f\u043e\u0432\u0430<\/a>.<\/p>\n<p>\u041d\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438: pnpm monorepo, \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 ESLint \u0438 TypeScript, Prettier &#8212; \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 <a href=\"https:\/\/github.com\/alexicum\/subpath-imports\" rel=\"noopener noreferrer nofollow\">\u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435<\/a>.<\/p>\n<p><a class=\"anchor\" name=\"terminology\" id=\"terminology\"><\/a><\/p>\n<h3>\u0422\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u044f<\/h3>\n<ul>\n<li>\n<p>\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043c\u043e\u0434\u0443\u043b\u044f &#8212; \u044d\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 \u0441 \u043f\u0443\u0442\u0435\u043c \u043a \u0444\u0430\u0439\u043b\u0443 \u0438\u043b\u0438 \u0438\u043c\u044f \u043f\u0430\u043a\u0435\u0442\u0430 \u0432 import\/re-export \u043f\u043e\u0441\u043b\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 <code>from<\/code> \u0438\u043b\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430: import().<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.rs\/oxc_resolver\/latest\/oxc_resolver\/#specifier\" rel=\"noopener noreferrer nofollow\">\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0438\u043c\u043f\u043e\u0440\u0442\u0430<\/a> &#8212; \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043c\u043e\u0434\u0443\u043b\u044f \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 import.<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0438\u0441\u043a\u0430 \u0444\u0430\u0439\u043b\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043c\u043e\u0434\u0443\u043b\u044f. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0447\u0430\u0449\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <code>\"\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432\"<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439 \u0438\u043c\u043f\u043e\u0440\u0442 (\u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0441\u0442\u0430\u0442\u044c\u0438) &#8212; \u044d\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043c\u043e\u0434\u0443\u043b\u044f (\u0432 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u0438\u043b\u0438 \u0440\u0435\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435) \u0441 \u0445\u044d\u0448\u0442\u0435\u0433\u043e\u043c <code>#<\/code> \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 <code>subpath imports<\/code> \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u044b\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u043a\u0435\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>TSServer \u0438\u043b\u0438 Language Server \u0432 tsgo (\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439 LSP) \u0434\u0430\u043b\u0435\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a TSServer.<\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"tools\" id=\"tools\"><\/a><\/p>\n<h3>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438<\/h3>\n<ul>\n<li>\n<p>pnpm monorepo<\/p>\n<\/li>\n<li>\n<p>TypeScript (v7.0.2, v6.0.3, v5.x) \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 ESM \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439<\/p>\n<\/li>\n<li>\n<p>Vite (v8.0) \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0441\u0431\u043e\u0440\u043a\u0438 web \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<li>\n<p>tsdown \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 UI \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>package.json imports\/exports: <\/p>\n<ul>\n<li>\n<p><code>conditional subpath imports<\/code> &#8212; \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u043e\u0432 \u0434\u043b\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439<\/p>\n<\/li>\n<li>\n<p><code>conditional subpath exports<\/code> &#8212; \u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 UI \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 dev-\u0440\u0435\u0436\u0438\u043c\u0435<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><code>tsc<\/code> \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u0438\u043f\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>ESLint v10 \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0442\u0438\u043f\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>VSCode &#8212; \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0443\u0442\u0435\u0439 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432<\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"workspaces\" id=\"workspaces\"><\/a><\/p>\n<h3>\u0421\u043e\u0441\u0442\u0430\u0432 \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f<\/h3>\n<ul>\n<li>\n<p>apps\/web &#8212; frontend \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (React). \u0421\u0431\u043e\u0440\u043a\u0430: Vite;<\/p>\n<\/li>\n<li>\n<p>packages\/ui &#8212; \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 (React);<\/p>\n<\/li>\n<li>\n<p>packages\/typescript-config &#8212; \u043f\u0430\u043a\u0435\u0442 \u0441 \u0431\u0430\u0437\u043e\u0432\u044b\u043c\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u043c\u0438 TypeScript \u0434\u043b\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f;<\/p>\n<\/li>\n<li>\n<p>packages\/eslint-config &#8212; \u043f\u0430\u043a\u0435\u0442 \u0441 \u0431\u0430\u0437\u043e\u0432\u044b\u043c\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u043c\u0438 ESLint \u0434\u043b\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"tools-features\" id=\"tools-features\"><\/a><\/p>\n<h3>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/h3>\n<p>\u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 issues \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439 Node.js, \u0432 \u0442.\u0447. \u043a\u0430\u043a \u201c\u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438\u201d.<br \/> \u0412\u044b\u0434\u0435\u0440\u0436\u043a\u0430 \u0438\u0437 <a href=\"https:\/\/nodejs.org\/api\/packages.html#module-resolution-and-loading:~:text=When%20a%20module%20is%20requested%20via%20static,is%20a%20relative%20or%20absolute%20file%20URL.\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Node.js<\/a>:<\/p>\n<blockquote>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043c\u043e\u0434\u0443\u043b\u044c \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 (\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043c\u043e\u0434\u0443\u043b\u044f\u0445 ES) \u0438\u043b\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 import() (\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0432 \u043c\u043e\u0434\u0443\u043b\u044f\u0445 CommonJS \u0438 ES) \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f:<\/p>\n<ul>\n<li>\n<p>\u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u043f\u043a\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u043e\u0434\u0443\u043b\u044f, \u0438\u043d\u0434\u0435\u043a\u0441 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 (<code>.\/api\/index.js<\/code>) \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u043e\u0438\u0441\u043a \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f. \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u0435\u0441\u043b\u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0438\u043b\u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u043c URL-\u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0444\u0430\u0439\u043b\u0430.<\/p>\n<\/li>\n<\/ul>\n<\/blockquote>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f Node.js, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0435\u0439. \u0414\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0441 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u043c\u0438 \u043f\u0443\u0442\u044f\u043c\u0438 \u0434\u043b\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438.<\/p>\n<p>TypeScript, Turborepo \u0438 \u0434\u0440. \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>subpath imports<\/code> \u0432\u043c\u0435\u0441\u0442\u043e paths aliases \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439:<\/p>\n<blockquote>\n<p><a href=\"https:\/\/www.typescriptlang.org\/docs\/handbook\/modules\/reference.html#paths:~:text=Both%20libraries%20and%20apps%20can%20consider%20package.json%20%22imports%22%20as%20a%20standard%20replacement%20for%20convenience%20paths%20aliases.\" rel=\"noopener noreferrer nofollow\">(TS) Both libraries and apps can consider package.json \u201cimports\u201d as a standard replacement for convenience paths aliases.<\/a><\/p>\n<\/blockquote>\n<blockquote>\n<p><a href=\"https:\/\/turborepo.dev\/docs\/guides\/tools\/typescript#use-nodejs-subpath-imports-instead-of-typescript-compiler-paths\" rel=\"noopener noreferrer nofollow\">(Turbo) Use Node.js subpath imports instead of TypeScript compiler paths<\/a><\/p>\n<\/blockquote>\n<p>VSCode IntelliSense \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0434\u043b\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 TSServer.<br \/> TSServer \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 typescript-language-features (VSCode extension) \u0438\u0437 <code>.vscode\/settings.json<\/code>.<\/p>\n<p>TSServer, tsc, Vite\/tsdown (Rolldown) \u0447\u0438\u0442\u0430\u044e\u0442:<\/p>\n<ul>\n<li>\n<p>\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 TypeScript (tsconfig.json),<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u043b\u044f <code>type<\/code>, <code>exports<\/code> \u0438 <code>imports<\/code> \u0432 package.json<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 (vite.config.ts, tsdown.config.ts).<\/p>\n<\/li>\n<\/ul>\n<p>TypeScript (TS) \u0438 Vite \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 (vite dev) \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u043a \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a (ui). \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 \u043f\u043e\u043b\u0435 <code>exports<\/code> package.json \u0442\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430 \u043f\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044e <code>\"@repo\/source\"<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438.<\/p>\n<p>\u0423\u0441\u043b\u043e\u0432\u0438\u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432:<\/p>\n<ul>\n<li>\n<p><code>tsconfig.json<\/code>: <code>compilerOptions.customConditions<\/code><\/p>\n<\/li>\n<li>\n<p><code>vite.config.ts<\/code>: <code>resolve.conditions<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>Tsdown \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0442\u0440\u0430\u043d\u0441\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 ui \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438\u0437 ts \u0432 js (\u043e\u043f\u0446\u0438\u044f <code>unbundle: true<\/code>) \u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f, \u0447\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 Vite \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0435\u0437\u0430\u0442\u044c \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043a\u043e\u0434 (tree-shaking), \u0430 \u0432 dev-\u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c HMR \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445 \u0432 \u043a\u043e\u0434\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/p>\n<p><a class=\"anchor\" name=\"common-settings\" id=\"common-settings\"><\/a><\/p>\n<h3>\u041e\u0431\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438<\/h3>\n<p>\u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0430 ESM \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u043f\u0430\u043a\u0435\u0442\u0430\u0445 type: module.<\/p>\n<p><code>package.json<\/code>:<\/p>\n<pre><code class=\"json\">  \"name\": \"@repo\/package-name\",  \"type\": \"module\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><a class=\"anchor\" name=\"vite\" id=\"vite\"><\/a><\/p>\n<h4>Vite<\/h4>\n<p>Vite \u043d\u0435 \u0447\u0438\u0442\u0430\u0435\u0442 customConditions \u0438\u0437 tsconfig.json. \u0427\u0442\u043e\u0431\u044b \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 (<code>vite dev<\/code>) Vite \u043e\u0431\u0440\u0430\u0449\u0430\u043b\u0441\u044f \u043a \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 (ui) \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432 <code>resolve.conditions<\/code>:<\/p>\n<p><code>vite.config.ts<\/code><\/p>\n<pre><code>export default defineConfig(({ command }) =&gt; {  const customConditions: string[] = []  \/\/ 'serve': during dev (vite command)  if (command === 'serve') {    customConditions.push('@repo\/source')  }  return {    plugins: [react()],    resolve: {      conditions: customConditions,    },  ...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412 \u0440\u0435\u0436\u0438\u043c\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 (<code>vite build<\/code>) Vite \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 <code>default<\/code> \u0438 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u043e\u0434\u0443 (\u0441\u043c. <a href=\"#compiled-packages\" rel=\"noopener noreferrer nofollow\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432<\/a>).<br \/> \u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 Vite \u0443\u0441\u043b\u043e\u0432\u0438\u0439 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0438 \u0442\u0438\u043f\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 [Rolldown] (<a href=\"https:\/\/rolldown.rs\/reference\/InputOptions.resolve#conditionnames\" rel=\"noopener noreferrer nofollow\">https:\/\/rolldown.rs\/reference\/InputOptions.resolve#conditionnames<\/a>).<\/p>\n<p><a class=\"anchor\" name=\"typescript\" id=\"typescript\"><\/a><\/p>\n<h4>TypeScript<\/h4>\n<p>\u041d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 TypeScript \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0432 <code>packages\\typescript-config\\base.json<\/code><br \/> <a href=\"https:\/\/vite-docs.ru\/guide\/features#typescript-compiler-options\" rel=\"noopener noreferrer nofollow\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 TypeScript \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 Vite<\/a>.<\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 TypeScript, \u0432\u043b\u0438\u044f\u044e\u0449\u0438\u0435 \u043d\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0435\u0439:<\/p>\n<pre><code class=\"json\">  \"compilerOptions\": {    \/\/ \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442 ESM \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u0432 ECMAScript    \"module\": \"esnext\",    \/\/ \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 TS, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0431\u0430\u043d\u0434\u043b\u0435\u0440. \u041d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439.    \"moduleResolution\": \"bundler\",    \/\/ \u0411\u0430\u0433 TSServer (\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0432 tsgo) \u0441 verbatimModuleSyntax:    \/\/ \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442 \u043f\u0430\u0440\u043d\u044b\u0445 &lt;Tag&gt;&lt;\/Tag&gt; \u0434\u0430\u0451\u0442 import type \u0432\u043c\u0435\u0441\u0442\u043e import. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e &lt;Tag \/&gt; \u0438\u043b\u0438 &lt;Tag&gt;.    \/\/ \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 VSCode:    \/\/ `js\/ts.preferences.preferTypeOnlyAutoImports: true`    \"verbatimModuleSyntax\": false,    \/\/ \u0415\u0441\u043b\u0438 outDir \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0442\u043e TS-&gt;TSServer-&gt;VSCode \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435: .js    \"outDir\": \".\/dist\",    \"rootDir\": \".\/src\",    \/\/ \u0423\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0432 \u043f\u043e\u043b\u044f\u0445 exports\/imports (package.json) \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u043f\u0443\u0442\u0435\u0439 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432    \"customConditions\": [\"@repo\/source\", \"@repo\/ts-subpath-imports\"]  }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412 <code>tsconfig.app.json<\/code> \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c <code>verbatimModuleSyntax<\/code> &#8212; \u0443\u043a\u0430\u0437\u0430\u0442\u044c <code>false<\/code>.<\/p>\n<p>verbatimModuleSyntax \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\/\u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u0442\u0438\u043f\u043e\u0432 \u0431\u0435\u0437 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 <code>type<\/code>.<\/p>\n<p>\u0412 dev-\u0440\u0435\u0436\u0438\u043c\u0435 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u043c\u0430\u044f verbatimModuleSyntax \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 ESLint \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0430\u0432\u0442\u043e\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>consistent-type-imports<\/p>\n<\/li>\n<li>\n<p>consistent-type-exports<\/p>\n<\/li>\n<li>\n<p>no-import-type-side-effects<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u043c. <code>packages\\eslint-config\\typescript-eslint.js<\/code>.<\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u0432 tsc \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f tsconfig.build.json \u0441 <code>\"verbatimModuleSyntax\": true<\/code><\/p>\n<p><a class=\"anchor\" name=\"vscode-intellisense\" id=\"vscode-intellisense\"><\/a><\/p>\n<h4>VSCode IntelliSense<\/h4>\n<p>TSServer \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 VSCode \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432. \u0427\u0442\u043e\u0431\u044b TSServer \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b \u0432 VSCode \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0435 \u043f\u0443\u0442\u0438 \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0432 <code>.vscode\/settings.json<\/code> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:<\/p>\n<pre><code class=\"json\">  \"js\/ts.preferences.importModuleSpecifier\": \"non-relative\",  \"js\/ts.preferences.importModuleSpecifierEnding\": \"minimal\",  \/\/ \u0411\u0430\u0433 TSServer (\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0432 tsgo) \u0441 preferTypeOnlyAutoImports:  \/\/ \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442 \u043f\u0430\u0440\u043d\u044b\u0445 &lt;Tag&gt;&lt;\/Tag&gt; \u0434\u0430\u0451\u0442 import type \u0432\u043c\u0435\u0441\u0442\u043e import. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e &lt;Tag \/&gt; \u0438\u043b\u0438 &lt;Tag&gt;.`  \/\/ \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u043e\u043f\u0446\u0438\u0435\u0439 TypeScript: \"verbatimModuleSyntax: true\".  \"js\/ts.preferences.preferTypeOnlyAutoImports\": false,  \/\/ \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 style guide.  \"js\/ts.preferences.quoteStyle\": \"single\",<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435<\/strong>: <a href=\"https:\/\/github.com\/microsoft\/TypeScript\/pull\/56090\" rel=\"noopener noreferrer nofollow\">\u043e\u043f\u0446\u0438\u044f preferTypeOnlyAutoImports \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u043a\u0430\u043a \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430 verbatimModuleSyntax<\/a>.<\/p>\n<p><a class=\"anchor\" name=\"conditional-subpath-exports-settings\" id=\"conditional-subpath-exports-settings\"><\/a><\/p>\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 conditional subpath exports \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432\/\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a<\/h3>\n<p><a href=\"https:\/\/turborepo.dev\/docs\/core-concepts\/internal-packages#compilation-strategies\" rel=\"noopener noreferrer nofollow\">\u0412 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 Turborepo<\/a> \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430:<\/p>\n<ul>\n<li>\n<p>Just-in-Time packages<\/p>\n<\/li>\n<li>\n<p>Compiled packages.<\/p>\n<\/li>\n<\/ul>\n<p>JIT packages \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u043c \u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432.<br \/> Compiled packages \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u043c tsdown, \u0430 \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (Vite) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 &#8212; \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0430\u043d\u0441\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439).<\/p>\n<p><a class=\"anchor\" name=\"jit-settings\" id=\"jit-settings\"><\/a><\/p>\n<h4>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 JIT \u043f\u0430\u043a\u0435\u0442\u043e\u0432<\/h4>\n<p>\u0422\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430 <code>exports<\/code> \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438.<\/p>\n<p><code>package.json<\/code>:<\/p>\n<pre><code class=\"json\">  \"exports\": { \".\": \".\/src\/index.ts\" }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><a class=\"anchor\" name=\"compiled-packages\" id=\"compiled-packages\"><\/a><\/p>\n<h4>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432<\/h4>\n<p>\u0422\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430 <code>exports<\/code> \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438: \u201cdefault\u201d \u0438 \u201ctypes\u201d \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0438 \u0442\u0438\u043f\u043e\u0432.<br \/> \u0423\u0441\u043b\u043e\u0432\u0438\u0435 \u201c@repo\/source\u201d \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b Vite \u0438 IntelliSense \u0441 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c.<br \/> \u0412\u0430\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u201c@repo\/source\u201d \u0432\u044b\u0448\u0435 default, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 TypeScript \u0438 \u0431\u0430\u043d\u0434\u043b\u0435\u0440\u044b (Vite, tsdown) \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0432 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u201cdefault\u201d, \u0430 \u043f\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 Node.js \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c\u0443 \u043a\u043b\u044e\u0447\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430.<\/p>\n<blockquote>\n<p>(TypeScript) <a href=\"https:\/\/www.typescriptlang.org\/docs\/handbook\/modules\/reference.html#:~:text=When%20resolving%20through%20conditional%20%22exports%22%2C%20TypeScript%20always%20matches%20the%20%22types%22%20and%20%22default%22%20conditions%20if%20present.\" rel=\"noopener noreferrer nofollow\">When resolving through conditional \u201cexports\u201d, TypeScript always matches the \u201ctypes\u201d and \u201cdefault\u201d conditions if present.<\/a><\/p>\n<\/blockquote>\n<p><code>package.json<\/code>:<\/p>\n<pre><code class=\"json\">  \"exports\": {    \".\": {      \"@repo\/source\": \".\/src\/index.ts\",      \"types\": \".\/dist\/index.d.mts\",      \"default\": \".\/dist\/index.mjs\"    },  }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><a class=\"anchor\" name=\"conditional-subpath-imports-settings\" id=\"conditional-subpath-imports-settings\"><\/a><\/p>\n<h3>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c conditional subpath imports<\/h3>\n<p>package.json \u043f\u0430\u043a\u0435\u0442\u043e\u0432 web \u0438 ui:<\/p>\n<pre><code class=\"json\">  \"imports\": {    \"#*\": {      \"@repo\/ts-subpath-imports\": [        \".\/src\/*\/index.js\",        \".\/src\/*.js\"      ],      \"default\": \".\/src\/*\"    }  },<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u043b\u044f <a href=\"#dir-modules\" rel=\"noopener noreferrer nofollow\">\u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e API \u043c\u043e\u0434\u0443\u043b\u044f<\/a>.<\/p>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u0432 \u0446\u0435\u043b\u0435\u0432\u044b\u0445 \u043f\u0443\u0442\u044f\u0445 <\/strong><code><strong>subpath imports<\/strong><\/code><strong> \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f <\/strong><code><strong>.js<\/strong><\/code><strong>: <\/strong><code><strong>\".\/src\/*\/index.js\", \".\/src\/*.js\"<\/strong><\/code><strong>?<\/strong><\/p>\n<p>TypeScript \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u043e\u0438\u0441\u043a \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f: \u043b\u0438\u0431\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c, \u043b\u0438\u0431\u043e \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u0443\u0442\u044c <code>subpath imports<\/code>.<br \/> \u0415\u0441\u043b\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <code>.js<\/code> \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0432 subpath imports &#8212; TS \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043a extensionless \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443 <code>.js<\/code> \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0444\u0430\u0439\u043b\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438: <a href=\"https:\/\/www.typescriptlang.org\/docs\/handbook\/modules\/reference.html#file-extension-substitution\" rel=\"noopener noreferrer nofollow\">File extension substitution<\/a><\/p>\n<p>\u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0435 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 <code>fallbacks array<\/code> (\u0441\u043c. \u043d\u0438\u0436\u0435) \u0446\u0435\u043b\u0435\u0432\u044b\u0435 \u043f\u0443\u0442\u0438 \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c\u0438, \u043a\u0430\u043a \u044d\u0442\u043e <a href=\"https:\/\/turborepo.dev\/docs\/guides\/tools\/typescript#use-nodejs-subpath-imports-instead-of-typescript-compiler-paths:~:text=add%20explicit%20fallbacks%20for%20the%20source%20files%20you%20want%20to%20support\" rel=\"noopener noreferrer nofollow\">\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Turborepo \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439<\/a>.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0442\u043e TSServer \u0432 \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430\u0445 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p><strong>\u0414\u043b\u044f \u0447\u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 <\/strong><code><strong>@repo\/ts-subpath-imports<\/strong><\/code><strong>?<\/strong><\/p>\n<p>TS \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 (fallbacks array) \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0432 \u043f\u043e\u043b\u044f\u0445 package.json <code>exports<\/code> \/ <code>imports<\/code>. Vite (oxc-resolver \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c) \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 Node.js \u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u043a\u0443 \u0438\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0434\u043b\u044f \u0446\u0435\u043b\u0435\u0432\u044b\u0445 \u043f\u0443\u0442\u0435\u0439 <code>subpath imports<\/code>, issues:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/vitejs\/vite\/issues\/16153\" rel=\"noopener noreferrer nofollow\">Subpath imports only work for first element in array #16153<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/vitejs\/vite\/issues\/4439\" rel=\"noopener noreferrer nofollow\">package.json \u201cexports\u201d field fallback array support #4439<\/a><\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 <code>\".\/src\/*\"<\/code> \u0432 \u043d\u0430\u0447\u0430\u043b\u043e fallbacks array, \u043d\u043e \u0442\u043e\u0433\u0434\u0430 \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c <code>.js<\/code>.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 TypeScript \u0431\u0443\u0434\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c <code>subpath imports<\/code> \u0447\u0435\u0440\u0435\u0437 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 <code>@repo\/ts-subpath-imports<\/code>, \u0430 Vite &#8212; \u0447\u0435\u0440\u0435\u0437 <code>default<\/code>.<\/p>\n<p><a class=\"anchor\" name=\"tsserver-and-subpath-patterns\" id=\"tsserver-and-subpath-patterns\"><\/a><\/p>\n<h4>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b TSServer \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 (subpath patterns)<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0428\u0430\u0431\u043b\u043e\u043d<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u0440\u0438\u043c\u0435\u0440<\/p>\n<\/th>\n<th>\n<p align=\"left\">TS, Node<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0438 \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0412\u0432\u043e\u0434 \u043f\u0443\u0442\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0443\u0442\u0438<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">#*<\/p>\n<\/td>\n<td>\n<p align=\"left\">import { App } from \u2018#app\/App\u2019<\/p>\n<\/td>\n<td>\n<p align=\"left\">TS: v5.4.0, Node.js: v14.6.0, v12.19.0<\/p>\n<\/td>\n<td>\n<p align=\"left\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441 paths<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\n<\/td>\n<td>\n<p align=\"left\">\n<\/td>\n<td>\n<p align=\"left\">tsgo<\/p>\n<\/td>\n<td>\n<p align=\"left\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441 paths<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">#src\/*<\/p>\n<\/td>\n<td>\n<p align=\"left\">import { App } from \u2018#src\/app\/App\u2019<\/p>\n<\/td>\n<td>\n<p align=\"left\">TS: v5.7.2, Node.js: v25.4.0, v24.14.0<\/p>\n<\/td>\n<td>\n<p align=\"left\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441 paths<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\n<\/td>\n<td>\n<p align=\"left\">\n<\/td>\n<td>\n<p align=\"left\">tsgo<\/p>\n<\/td>\n<td>\n<p align=\"left\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441 paths<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">#\/*<\/p>\n<\/td>\n<td>\n<p align=\"left\">import { App } from \u2018#\/app\/App\u2019<\/p>\n<\/td>\n<td>\n<p align=\"left\">TS: v6.0.2, Node.js: v25.4.0, v24.14.0<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441 paths<\/p>\n<\/td>\n<td>\n<p align=\"left\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441 paths<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\n<\/td>\n<td>\n<p align=\"left\">\n<\/td>\n<td>\n<p align=\"left\">tsgo<\/p>\n<\/td>\n<td>\n<p align=\"left\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">+<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441 paths<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<ul>\n<li>\n<p>tsgo &#8212; TypeScript 7.0.2 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 LSP.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0443\u0442\u0438 &#8212; <code>path completion<\/code> \u0438\u043b\u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0443\u0442\u0438 IntelliSense \u043f\u0440\u0438 \u0440\u0443\u0447\u043d\u043e\u043c \u0432\u0432\u043e\u0434\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0412\u0432\u043e\u0434 \u043f\u0443\u0442\u0438 (\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0430) \u0432\u0440\u0443\u0447\u043d\u0443\u044e &#8212; Vite, tsdown, tsc, TSServer \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0447\u0438\u0442\u0430\u044e\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u0443\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u0430 <code>#\/*<\/code> \u0434\u043e tsgo (ts 7.0.2) \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c <code>compilerOptions.paths<\/code> \u0432 web\/tsconfig.app.json \u0438 ui\/tsconfig.app.json, \u0438\u043d\u0430\u0447\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c:<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"json\">  \"compilerOptions\": {    \"paths\": {      \"#\/*\": [\".\/src\/*\"]    }  }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><a class=\"anchor\" name=\"dir-modules\" id=\"dir-modules\"><\/a><\/p>\n<h3>\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e API \u043c\u043e\u0434\u0443\u043b\u044f (index.ts) \u0447\u0435\u0440\u0435\u0437 subpath imports<\/h3>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u043c\u043e\u0434\u0443\u043b\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 API \u0447\u0435\u0440\u0435\u0437 <code>index.ts<\/code>, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u0440\u044b\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0438 \u0434\u0435\u0442\u0430\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u0438 FSD):<\/p>\n<ul>\n<li>\n<p>src\/shared\/api\/ <\/p>\n<ul>\n<li>\n<p>api.ts &#8212; \u0444\u0430\u0439\u043b, \u0433\u0434\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f api;<\/p>\n<\/li>\n<li>\n<p>index.ts &#8212; \u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 API \u043c\u043e\u0434\u0443\u043b\u044f, \u0441 \u0440\u0435\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u043e\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 api.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u041b\u043e\u0433\u0438\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043e\u0442\u0434\u0430\u0432\u0430\u043b \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 <a href=\"https:\/\/www.typescriptlang.org\/docs\/handbook\/modules\/reference.html#directory-modules-index-file-resolution\" rel=\"noopener noreferrer nofollow\">directory module<\/a> \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b:<\/p>\n<ul>\n<li>\n<p>\u0438\u043b\u0438 \u043f\u0430\u043f\u043a\u0443 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u0444\u0430\u0439\u043b <code>index.ts<\/code>: <code>import { api } from '#shared\/api'<\/code><\/p>\n<\/li>\n<li>\n<p>\u0438\u043b\u0438 \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a <code>index.ts<\/code> (\u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c\u0438): <code>import { api } from '#shared\/api\/index.ts'<\/code><\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439<\/strong>: \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u0443\u0442\u044c \u0441 index.js \u043f\u0435\u0440\u0432\u044b\u043c \u0432 <code>fallbacks array<\/code> <code>subpath imports<\/code> &#8212; \u044d\u0442\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439:<\/p>\n<ul>\n<li>\n<p>\u0435\u0441\u0442\u044c \u0444\u0430\u0439\u043b <code>index.ts<\/code> &#8212; \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e: <code>import { api } from '#shared\/api'<\/code><\/p>\n<\/li>\n<li>\n<p>\u043d\u0435\u0442 &#8212; \u043d\u0430 \u0444\u0430\u0439\u043b c \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c: <code>import { api } from '#shared\/api\/api'<\/code><\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0441 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c\u0438<\/strong> \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c &#8212; \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442 \u043e\u0442\u0434\u0430\u0435\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443 \u0438\u043c\u043f\u043e\u0440\u0442\u0430, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u043c\u0443 \u043d\u0430 \u0444\u0430\u0439\u043b \u0441 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c: <code>#shared\/api\/api.ts<\/code>.<\/p>\n<p><strong>\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435<\/strong><\/p>\n<ul>\n<li>\n<p>\u041d\u0435 \u043e\u0442\u043c\u0435\u043d\u044f\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e\u0433\u043e \u043b\u0438\u043d\u0442\u0438\u043d\u0433\u0430 (\u0441\u043c. <a href=\"#notes\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f<\/a>).<\/p>\n<\/li>\n<li>\n<p>tsdown \u0438 Vite \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u0432\u044b\u0440\u0435\u0437\u0430\u044e\u0442 barrel (index) \u0444\u0430\u0439\u043b\u044b \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043c\u0435\u0442\u0438\u0442\u044c \u0438\u0445 \u043a\u0430\u043a side-effects free: <\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/rolldown.rs\/in-depth\/lazy-barrel-optimization#requirements\" rel=\"noopener noreferrer nofollow\">Rolldown. Lazy Barrel Optimization<\/a>.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/newreleases.io\/project\/github\/rolldown\/rolldown\/release\/v1.1.0\" rel=\"noopener noreferrer nofollow\">Rolldown v1.1.0: experimental.lazyBarrel is now enabled by default<\/a>.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"prebuild-typechecking-settings\" id=\"prebuild-typechecking-settings\"><\/a><\/p>\n<h3>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 tsc \u043f\u0435\u0440\u0435\u0434 \u0441\u0431\u043e\u0440\u043a\u043e\u0439<\/h3>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c:<\/p>\n<ul>\n<li>\n<p>\u0441\u043e\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 <code>verbatimModuleSyntax<\/code> (\u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0439 \u0432 dev-\u0440\u0435\u0436\u0438\u043c\u0435);<\/p>\n<\/li>\n<li>\n<p>\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0441 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u043c\u0438 <code>paths<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0431\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0443\u043a\u0430\u0436\u0435\u043c \u0432 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 <code>packages\/typescript-config\/build.json<\/code>:<\/p>\n<pre><code class=\"json\">  \"compilerOptions\": {    \"verbatimModuleSyntax\": true,    \/\/ The goal is to stop using path aliases    \"paths\": null  }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0443\u0441\u0442\u043e\u0439 <code>tsconfig.build.json<\/code> \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u201ctsconfig.app.json\u201d \u0438 \u201c@repo\/typescript-config\/build.json\u201d.<\/p>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430 tsc \u0432 package.json \u043f\u0430\u043a\u0435\u0442\u043e\u0432 web \u0438 ui:<br \/> <code>package.json<\/code><\/p>\n<pre><code class=\"json\">  \"typecheck\": \"tsc -p tsconfig.build.json &amp;&amp; tsc -p tsconfig.node.json\",<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a \u0438\u0437 \u043a\u043e\u0440\u043d\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430: <code>pnpm typecheck<\/code>.<\/p>\n<p><a class=\"anchor\" name=\"notes\" id=\"notes\"><\/a><\/p>\n<h3>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f<\/h3>\n<ol>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0438\u043c\u044f \u043f\u0430\u043f\u043a\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u043f\u0430\u043f\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0433\u043e \u0438 \u043e\u0431\u0435 \u043f\u0430\u043f\u043a\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435, \u0442\u043e TSServer \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0440\u0435\u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432 barrel file (index.ts) \u0438 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043f\u0443\u0442\u044c \u043a tsx, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430: <code>.\/src\/Icon<\/code> \u0438 <code>.\/src\/IconButton<\/code> &#8212; \u043f\u0440\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 Icon \u0438\u0437 IconButton IDE \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043f\u0443\u0442\u044c \u2018#Icon\/Icon\u2019, \u0432\u043c\u0435\u0441\u0442\u043e \u2018#Icon\u2019. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0437\u0430\u043c\u0435\u043d\u0435 \u0438\u043c\u0435\u043d\u0438 \u043f\u0430\u043f\u043a\u0438 <code>Icon<\/code> \u043d\u0430: <code>I<\/code>, <code>Ic<\/code>, <code>Ico<\/code>, <code>IconB<\/code>, \u0438 \u0442.\u0434. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e &#8212; issue TypeScript. \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435: <a href=\"https:\/\/github.com\/un-ts\/eslint-plugin-import-x\/blob\/master\/docs\/rules\/no-useless-path-segments.md\" rel=\"noopener noreferrer nofollow\">import-x\/no-useless-path-segments<\/a><\/p>\n<\/li>\n<li>\n<p>\u0426\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0432\u0435\u0448\u0430\u0435\u0442 ESLint &#8212; \u0443\u0432\u043e\u0434\u0438\u0442 \u0432 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e: \u0432 index.ts \u0444\u0430\u0439\u043b\u0430\u0445 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0443\u0442\u0438: <code>.\/src\/components\/Icon\/index.ts<\/code><\/p>\n<pre><code>  \/\/ export { Icon } from '#components\/Icon\/Icon' - hangs ESLint.  export { Icon } from '.\/Icon.tsx'<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438 \u0441\u043c\u0435\u043d\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043f\u043e\u0434\u043f\u0443\u0442\u0438 (<code>#*<\/code> -&gt; <code>#\/*<\/code>) \u0432 ui\/package.json \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0440\u0435\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u044b \u0432 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u043c <code>index.ts<\/code>, \u0438\u043d\u0430\u0447\u0435 \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u201c\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0435\u201d \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0438\u043c\u043f\u043e\u0440\u0442\u0430.<\/p>\n<\/li>\n<\/ol>\n<p><a class=\"anchor\" name=\"conclusion\" id=\"conclusion\"><\/a><\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>Vite (oxc-resolver) \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 subpath pattern: <code>\"#*\": \".\/src\/*<\/code> \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043c\u043e\u0434\u0443\u043b\u0438 \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044f \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 (\u0432 \u0442.\u0447. \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b: <code>index.ts{x}<\/code>).<br \/> \u041e\u043f\u0446\u0438\u0438 Rolldown\/oxc_resolver: <a href=\"https:\/\/rolldown.rs\/reference\/InputOptions.resolve#extensions\" rel=\"noopener noreferrer nofollow\">extensions, mainFiles<\/a>.<\/p>\n<p>TypeScript, \u0441\u0442\u0440\u043e\u0433\u043e \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044f\u0441\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u043d\u0435 \u0438\u0449\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f, \u043d\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0443: \u043c\u0430\u0441\u0441\u0438\u0432 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 (fallbacks array \u0438\u043b\u0438 <a href=\"https:\/\/webpack.js.org\/guides\/package-exports\/#alternatives\" rel=\"noopener noreferrer nofollow\">alternatives \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 Webpack<\/a>)<\/p>\n<p>\u0412 issues TypeScript \u0438 Vite \u0435\u0441\u0442\u044c \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u0438 (2024\u0433.):<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/vitejs\/vite\/issues\/16153#issuecomment-1997415473\" rel=\"noopener noreferrer nofollow\">\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Vite \u0441\u0447\u0438\u0442\u0430\u044e\u0442 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 TypeScript \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c fallbacks array \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439<\/a>,<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/microsoft\/TypeScript\/issues\/60003#issuecomment-2364130579\" rel=\"noopener noreferrer nofollow\">\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 TypeScript \u0441\u0447\u0438\u0442\u0430\u044e\u0442, \u0447\u0442\u043e Vite \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u0438 \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439<\/a>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0434\u0430\u0432\u043d\u043e &#8212; \u043d\u0435\u0442 \u043f\u0440\u0438\u0447\u0438\u043d \u043e\u0436\u0438\u0434\u0430\u0442\u044c breaking changes \u0431\u0435\u0437 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b.<\/p>\n<p>Vite, tsdown, tsc \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0442 <code>subpath imports<\/code> \u0431\u0435\u0437 paths. Paths \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f TSServer.<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 <code>subpath imports<\/code>, \u0441 \u0443\u0447\u0435\u0442\u043e\u043c:<\/p>\n<ul>\n<li>\n<p><code>#*<\/code>, <code>#src\/*<\/code> &#8212; \u0431\u0435\u0437 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 path;<\/p>\n<\/li>\n<li>\n<p><code>#\/*<\/code> &#8212; \u0414\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0441 TS 6.0.2, \u043d\u043e TSServer IntelliSense \u0442\u0440\u0435\u0431\u0443\u0435\u0442 paths \u0434\u043e TS 7 (tsgo);<\/p>\n<\/li>\n<li>\n<p><code>path completion<\/code> \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0432 paths.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b. \u041c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c paths \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 <code>path completion<\/code> (\u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434 \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u0432 <code>tsconfig.build.json<\/code>).<\/p>\n<p>\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0443\u0442\u0438 \u0432 import \u043f\u0440\u0438 \u0440\u0443\u0447\u043d\u043e\u043c \u0432\u0432\u043e\u0434\u0435 \u043d\u0435 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e (IMHO) \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0432 IDE \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442\u0430.<br \/> TypeScript \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043d\u0430 Go. \u041c\u043d\u043e\u0433\u0438\u0435 issues \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 TypeScript language service \u0437\u0430\u043c\u043e\u0440\u043e\u0436\u0435\u043d\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: <a href=\"https:\/\/github.com\/microsoft\/TypeScript\/issues\/61504\" rel=\"noopener noreferrer nofollow\">Intellisense fails to detect package.json import paths #61504<\/a><\/p>\n<p>\u041f\u043e\u0434\u0445\u043e\u0434 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0430 backend (API) \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438: fastify + prisma \u0441 \u0442\u0440\u0430\u043d\u0441\u043f\u0438\u043b\u044f\u0446\u0438\u0435\u0439 tsdown \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0447\u0435\u0440\u0435\u0437 <code>tsx --conditions<\/code>.<\/p>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c <code>subpath imports<\/code> \u043a\u0430\u043a \u0435\u0434\u0438\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a <s>\u043f\u0440\u0430\u0432\u0434\u044b<\/s> \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u043e\u0432 &#8212; \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0435\u0433\u043e \u043f\u043e \u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u0438 \u043e\u0447\u0435\u043d\u044c \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u043e\u0442 \u0430\u0432\u0442\u043e\u0440\u043e\u0432 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b Node.js.<\/p>\n<p>\u041f\u043e\u0445\u043e\u0436\u0438\u0435 \u043c\u044b\u0441\u043b\u0438 \u0432 <a href=\"https:\/\/blog.isquaredsoftware.com\/2023\/08\/esm-modernization-lessons\/#issue-history:~:text=up-,It%27s,happy.\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u0435 \u041c\u0430\u0440\u043a\u0430 \u042d\u0440\u0438\u043a\u0441\u043e\u043d\u0430 \u043e \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 ESM \u0432 Redux.<\/a><\/p>\n<p><a href=\"https:\/\/github.com\/nodejs\/node\/issues\/58626\" rel=\"noopener noreferrer nofollow\">\u0421\u0438\u0441\u0442\u0435\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 monorepo \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 ESM\/TypeScript.<\/a><br \/> \u0410\u0432\u0442\u043e\u0440\u044b \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432 package.json \u0434\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"json\">  \"conditions\": [\"development\"],  \"extensions\": [\".js\", \".jsx\", \".ts\", \".tsx\"]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>P.S.<\/strong> \u0421\u043f\u0430\u0441\u0438\u0431\u043e <a class=\"mention\" href=\"\/users\/Lotgyero\">@Lotgyero<\/a> \u0437\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0443\u0440\u0443 \u0438 \u043d\u0430\u0432\u043e\u0434\u044f\u0449\u0438\u0435 \u043c\u044b\u0441\u043b\u0438.<\/p>\n<p><a class=\"anchor\" name=\"links\" id=\"links\"><\/a><\/p>\n<h3>\u0421\u0441\u044b\u043b\u043a\u0438<\/h3>\n<p><a class=\"anchor\" name=\"doc-links\" id=\"doc-links\"><\/a><\/p>\n<h4>\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/h4>\n<ol>\n<li>\n<p><a href=\"https:\/\/nodejs.org\/api\/packages.html\" rel=\"noopener noreferrer nofollow\">Node.js subpath exports \/ imports \/ patterns \/ conditions<\/a><\/p>\n<\/li>\n<li>\n<p>TypeScript. \u0420\u0430\u0437\u0434\u0435\u043b paths: <a href=\"https:\/\/www.typescriptlang.org\/docs\/handbook\/modules\/reference.html#paths:~:text=Both%20libraries%20and%20apps%20can%20consider%20package.json%20%22imports%22%20as%20a%20standard%20replacement%20for%20convenience%20paths%20aliases.\" rel=\"noopener noreferrer nofollow\">Both libraries and apps can consider package.json \u201cimports\u201d as a standard replacement for convenience paths aliases.<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.typescriptlang.org\/docs\/handbook\/modules\/reference.html#packagejson-imports-and-self-name-imports\" rel=\"noopener noreferrer nofollow\">TypeScript. \u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c package.json imports<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.typescriptlang.org\/docs\/handbook\/release-notes\/typescript-5-7.html#path-rewriting-for-relative-paths:~:text=Any%20time%20you%20want%20to%20import%20the%20%2Ets%20files%2C%20you%20can%20run%20it%20with%20node%20%2D%2Dconditions%3D%40my%2Dpackage%2Fdevelopment\" rel=\"noopener noreferrer nofollow\">TypeScript. \u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f customConditions \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/vite.dev\/guide\/features#typescript-compiler-options\" rel=\"noopener noreferrer nofollow\">Vite. \u041a\u0430\u043a\u0438\u0435 \u043e\u043f\u0446\u0438\u0438 tsconfig.json \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Vite<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/rolldown.rs\/reference\/InputOptions.resolve#conditionnames\" rel=\"noopener noreferrer nofollow\">Rolldown. Condition names to use when resolving exports in package.json<\/a><\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439:<\/p>\n<ol>\n<li>\n<p><a href=\"https:\/\/vite.dev\/config\/shared-options#resolve-extensions\" rel=\"noopener noreferrer nofollow\">Vite<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/rolldown.rs\/reference\/InputOptions.resolve#extensions\" rel=\"noopener noreferrer nofollow\">Rolldown<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/docs.rs\/oxc_resolver\/latest\/oxc_resolver\/\" rel=\"noopener noreferrer nofollow\">oxc_resolver<\/a><\/p>\n<\/li>\n<\/ol>\n<\/li>\n<li>\n<p>Turborepo. \u0420\u0430\u0437\u0434\u0435\u043b TypeScript: <a href=\"https:\/\/turborepo.dev\/docs\/guides\/tools\/typescript#use-nodejs-subpath-imports-instead-of-typescript-compiler-paths\" rel=\"noopener noreferrer nofollow\">Use Node.js subpath imports instead of TypeScript compiler paths<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/nodejs\/node\/issues\/58626\" rel=\"noopener noreferrer nofollow\">Support seamless cross-package development for monorepos #58626. Ernesto Stifano, Aniello Falcone<\/a><\/p>\n<\/li>\n<\/ol>\n<p><a class=\"anchor\" name=\"posts-links\" id=\"posts-links\"><\/a><\/p>\n<h4>\u0421\u0442\u0430\u0442\u044c\u0438<\/h4>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/738132\/\" rel=\"noopener noreferrer nofollow\">30 \u043c\u0430\u044f 2023. Subpath imports \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439. \u041c\u0430\u043a\u0441\u0438\u043c \u0417\u0435\u043c\u0441\u043a\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/colinhacks.com\/essays\/live-types-typescript-monorepo\" rel=\"noopener noreferrer nofollow\">31 \u043c\u0430\u044f 2024. Live types in a TypeScript monorepo. Colin McDonnell<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/840240\/\" rel=\"noopener noreferrer nofollow\">02 \u0441\u0435\u043d 2024. Subpath imports \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c\u0438 + vitest. \u0412\u0438\u0442\u0430\u043b\u0438\u0439 \u041f\u043e\u0442\u0430\u043f\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/johnnyreilly.com\/only-node-subpaths-with-no-restricted-imports-and-perfectionist-sort-imports\" rel=\"noopener noreferrer nofollow\">15 \u043e\u043a\u0442 2026. Block alternatives with no-restricted-imports. John Reilly<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/blog.isquaredsoftware.com\/2023\/08\/esm-modernization-lessons\/\" rel=\"noopener noreferrer nofollow\">08 \u0430\u0432\u0433 2023. My Experience Modernizing Packages to ESM. Mark Erikson<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1074190\/\">https:\/\/habr.com\/ru\/articles\/1074190\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0426\u0435\u043b\u0438\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043f\u0430\u043a\u0435\u0442\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Node.js subpath imports, \u043a\u0430\u043a \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u043e\u0432: \u0431\u0435\u0437 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 tsconfig path aliases;\u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 VSCode IntelliSense &#8212; \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442, \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0438 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432.\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 conditional exports &#8212; \u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 dev-\u0440\u0435\u0436\u0438\u043c\u0435, \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b Vite(HMR) \u0438 VSCode(IntelliSense) \u0441 \u0436\u0438\u0432\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0441\u0431\u043e\u0440\u043a\u0438.\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e API \u043c\u043e\u0434\u0443\u043b\u044f (index.ts) \u0447\u0435\u0440\u0435\u0437 subpath imports.\u041f\u0440\u0438\u043c\u0435\u0440\u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u044b \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 (package.json + \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0430).\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435\u0426\u0435\u043b\u0438\u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u0438\u0442\u043e\u0433\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435\u0422\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438\u0421\u043e\u0441\u0442\u0430\u0432 \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438\u041e\u0431\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 ViteTypeScriptVSCode IntelliSense\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 conditional subpath exports \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432\/\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 JIT \u043f\u0430\u043a\u0435\u0442\u043e\u0432\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c conditional subpath imports \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b TSServer \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 (subpath patterns)\u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e API \u043c\u043e\u0434\u0443\u043b\u044f (index.ts) \u0447\u0435\u0440\u0435\u0437 subpath imports\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 tsc \u043f\u0435\u0440\u0435\u0434 \u0441\u0431\u043e\u0440\u043a\u043e\u0439\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u0421\u0441\u044b\u043b\u043a\u0438 \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\u0421\u0442\u0430\u0442\u044c\u0438\u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u0438\u0442\u043e\u0433\u041a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u043c\u0435\u0436\u0434\u0443 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 subpath imports \u0434\u043b\u044f Vite \u0438 TypeScript \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c customConditions \u0441 fallbacks array \u0434\u043b\u044f TS. Vite \u0447\u0438\u0442\u0430\u0435\u0442 default \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438.\u0410\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442 (TSServer. \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0432 tsgo) \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 type \u0432 \u0438\u043c\u043f\u043e\u0440\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f: \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043e\u043f\u0446\u0438\u0438 VSCode js\/ts.preferences.preferTypeOnlyAutoImports\u0438 \u0437\u0430\u043c\u0435\u043d\u043e\u0439 verbatimModuleSyntax \u043d\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 ESLint \u0432 dev-\u0440\u0435\u0436\u0438\u043c\u0435.\u0410\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e API \u043c\u043e\u0434\u0443\u043b\u044f (index.ts) \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 extensionless \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043c\u0435\u0442\u043e\u0434\u044b \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0445 \u043c\u0435\u0436\u0434\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 ESM.\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0432\u0435\u0441\u043e\u043c\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043f\u043e\u043b\u044c\u0437\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u043d\u0435 \u0431\u044b\u043b\u043e. \u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u043c\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0430\u043c\u0438. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b, \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c extensionless \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438: \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e API \u043c\u043e\u0434\u0443\u043b\u044f (index.ts).\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0445 \u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0435\u0441\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u041c\u0430\u043a\u0441\u0438\u043c\u0430 \u0417\u0435\u043c\u0441\u043a\u043e\u0432\u0430 \u0438 \u0412\u0438\u0442\u0430\u043b\u0438\u044f \u041f\u043e\u0442\u0430\u043f\u043e\u0432\u0430.\u041d\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438: pnpm monorepo, \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 ESLint \u0438 TypeScript, Prettier &#8212; \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435.\u0422\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043c\u043e\u0434\u0443\u043b\u044f &#8212; \u044d\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 \u0441 \u043f\u0443\u0442\u0435\u043c \u043a \u0444\u0430\u0439\u043b\u0443 \u0438\u043b\u0438 \u0438\u043c\u044f \u043f\u0430\u043a\u0435\u0442\u0430 \u0432 import\/re-export \u043f\u043e\u0441\u043b\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 from \u0438\u043b\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430: import().\u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 &#8212; \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043c\u043e\u0434\u0443\u043b\u044f \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 import.\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0438\u0441\u043a\u0430 \u0444\u0430\u0439\u043b\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043c\u043e\u0434\u0443\u043b\u044f. \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0447\u0430\u0449\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f &#171;\u0420\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432&#187;.\u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0439 \u0438\u043c\u043f\u043e\u0440\u0442 (\u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0441\u0442\u0430\u0442\u044c\u0438) &#8212; \u044d\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u043c\u043e\u0434\u0443\u043b\u044f (\u0432 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u0438\u043b\u0438 \u0440\u0435\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435) \u0441 \u0445\u044d\u0448\u0442\u0435\u0433\u043e\u043c # \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 subpath imports \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u044b\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u043a\u0435\u0442\u0430.TSServer \u0438\u043b\u0438 Language Server \u0432 tsgo (\u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0439 LSP) \u0434\u0430\u043b\u0435\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a TSServer.\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438pnpm monorepoTypeScript (v7.0.2, v6.0.3, v5.x) \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 ESM \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439Vite (v8.0) \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0441\u0431\u043e\u0440\u043a\u0438 web \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044ftsdown \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 UI \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438package.json imports\/exports: conditional subpath imports &#8212; \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u043e\u0432 \u0434\u043b\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439conditional subpath exports &#8212; \u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 UI \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 dev-\u0440\u0435\u0436\u0438\u043c\u0435tsc \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u0438\u043f\u043e\u0432ESLint v10 \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0442\u0438\u043f\u043e\u0432VSCode &#8212; \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0443\u0442\u0435\u0439 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432\u0421\u043e\u0441\u0442\u0430\u0432 \u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044fapps\/web &#8212; frontend \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (React). \u0421\u0431\u043e\u0440\u043a\u0430: Vite;packages\/ui &#8212; \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 (React);packages\/typescript-config &#8212; \u043f\u0430\u043a\u0435\u0442 \u0441 \u0431\u0430\u0437\u043e\u0432\u044b\u043c\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u043c\u0438 TypeScript \u0434\u043b\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f;packages\/eslint-config &#8212; \u043f\u0430\u043a\u0435\u0442 \u0441 \u0431\u0430\u0437\u043e\u0432\u044b\u043c\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u043c\u0438 ESLint \u0434\u043b\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f.\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438\u0412 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 issues \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439 Node.js, \u0432 \u0442.\u0447. \u043a\u0430\u043a \u201c\u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438\u201d. \u0412\u044b\u0434\u0435\u0440\u0436\u043a\u0430 \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Node.js:\u041a\u043e\u0433\u0434\u0430 \u043c\u043e\u0434\u0443\u043b\u044c \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 (\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043c\u043e\u0434\u0443\u043b\u044f\u0445 ES) \u0438\u043b\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 import() (\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0432 \u043c\u043e\u0434\u0443\u043b\u044f\u0445 CommonJS \u0438 ES) \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f:\u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u043f\u043a\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u043e\u0434\u0443\u043b\u044f, \u0438\u043d\u0434\u0435\u043a\u0441 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 (.\/api\/index.js) \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e;\u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u043e\u0438\u0441\u043a \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f. \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u043e, \u0435\u0441\u043b\u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0438\u043b\u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u043c URL-\u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0444\u0430\u0439\u043b\u0430.\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f Node.js, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0435\u0439. \u0414\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0441 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u043c\u0438 \u043f\u0443\u0442\u044f\u043c\u0438 \u0434\u043b\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438.TypeScript, Turborepo \u0438 \u0434\u0440. \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c subpath imports \u0432\u043c\u0435\u0441\u0442\u043e paths aliases \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439:(TS) Both libraries and apps can consider package.json \u201cimports\u201d as a standard replacement for convenience paths aliases.(Turbo) Use Node.js subpath imports instead of TypeScript compiler pathsVSCode IntelliSense \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u0434\u043b\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 TSServer. TSServer \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 typescript-language-features (VSCode extension) \u0438\u0437 .vscode\/settings.json.TSServer, tsc, Vite\/tsdown (Rolldown) \u0447\u0438\u0442\u0430\u044e\u0442:\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 TypeScript (tsconfig.json),\u043f\u043e\u043b\u044f type, exports \u0438 imports \u0432 package.json\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 (vite.config.ts, tsdown.config.ts).TypeScript (TS) \u0438 Vite \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 (vite dev) \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u043a \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a (ui). \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 \u043f\u043e\u043b\u0435 exports package.json \u0442\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430 \u043f\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044e &#171;@repo\/source&#187; \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438.\u0423\u0441\u043b\u043e\u0432\u0438\u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432:tsconfig.json: compilerOptions.customConditionsvite.config.ts: resolve.conditions.Tsdown \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0442\u0440\u0430\u043d\u0441\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 ui \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438\u0437 ts \u0432 js (\u043e\u043f\u0446\u0438\u044f unbundle: true) \u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f, \u0447\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 Vite \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0435\u0437\u0430\u0442\u044c \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043a\u043e\u0434 (tree-shaking), \u0430 \u0432 dev-\u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c HMR \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445 \u0432 \u043a\u043e\u0434\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.\u041e\u0431\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0430 ESM \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u043f\u0430\u043a\u0435\u0442\u0430\u0445 type: module.package.json:  &#171;name&#187;: &#171;@repo\/package-name&#187;,  &#171;type&#187;: &#171;module&#187;ViteVite \u043d\u0435 \u0447\u0438\u0442\u0430\u0435\u0442 customConditions \u0438\u0437 tsconfig.json. \u0427\u0442\u043e\u0431\u044b \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 (vite dev) Vite \u043e\u0431\u0440\u0430\u0449\u0430\u043b\u0441\u044f \u043a \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 (ui) \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432 resolve.conditions:vite.config.tsexport default defineConfig(({ command }) =&gt; {  const customConditions: string[] = []  \/\/ &#8216;serve&#8217;: during dev (vite command)  if (command === &#8216;serve&#8217;) {    customConditions.push(&#8216;@repo\/source&#8217;)  }  return {    plugins: [react()],    resolve: {      conditions: customConditions,    },  &#8230;\u0412 \u0440\u0435\u0436\u0438\u043c\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 (vite build) Vite \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 default \u0438 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u043e\u0434\u0443 (\u0441\u043c. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432). \u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 Vite \u0443\u0441\u043b\u043e\u0432\u0438\u0439 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0438 \u0442\u0438\u043f\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 [Rolldown] (https:\/\/rolldown.rs\/reference\/InputOptions.resolve#conditionnames).TypeScript\u041d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 TypeScript \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0432 packages\\typescript-config\\base.json \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 TypeScript \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 Vite.\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 TypeScript, \u0432\u043b\u0438\u044f\u044e\u0449\u0438\u0435 \u043d\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0435\u0439:  &#171;compilerOptions&#187;: {    \/\/ \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442 ESM \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u0432 ECMAScript    &#171;module&#187;: &#171;esnext&#187;,    \/\/ \u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 TS, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0431\u0430\u043d\u0434\u043b\u0435\u0440. \u041d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439.    &#171;moduleResolution&#187;: &#171;bundler&#187;,    \/\/ \u0411\u0430\u0433 TSServer (\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0432 tsgo) \u0441 verbatimModuleSyntax:    \/\/ \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442 \u043f\u0430\u0440\u043d\u044b\u0445 &lt;Tag&gt;&lt;\/Tag&gt; \u0434\u0430\u0451\u0442 import type \u0432\u043c\u0435\u0441\u0442\u043e import. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e &lt;Tag \/&gt; \u0438\u043b\u0438 &lt;Tag&gt;.    \/\/ \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 VSCode:    \/\/ `js\/ts.preferences.preferTypeOnlyAutoImports: true`    &#171;verbatimModuleSyntax&#187;: false,    \/\/ \u0415\u0441\u043b\u0438 outDir \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0442\u043e TS-&gt;TSServer-&gt;VSCode \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435: .js    &#171;outDir&#187;: &#171;.\/dist&#187;,    &#171;rootDir&#187;: &#171;.\/src&#187;,    \/\/ \u0423\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0432 \u043f\u043e\u043b\u044f\u0445 exports\/imports (package.json) \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u043f\u0443\u0442\u0435\u0439 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432    &#171;customConditions&#187;: [&#171;@repo\/source&#187;, &#171;@repo\/ts-subpath-imports&#187;]  }\u0412 tsconfig.app.json \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c verbatimModuleSyntax &#8212; \u0443\u043a\u0430\u0437\u0430\u0442\u044c false.verbatimModuleSyntax \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\/\u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u0442\u0438\u043f\u043e\u0432 \u0431\u0435\u0437 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 type.\u0412 dev-\u0440\u0435\u0436\u0438\u043c\u0435 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u043c\u0430\u044f verbatimModuleSyntax \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 ESLint \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0430\u0432\u0442\u043e\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f:consistent-type-importsconsistent-type-exportsno-import-type-side-effects\u0421\u043c. packages\\eslint-config\\typescript-eslint.js.\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u0432 tsc \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f tsconfig.build.json \u0441 &#171;verbatimModuleSyntax&#187;: trueVSCode IntelliSenseTSServer \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 VSCode \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432. \u0427\u0442\u043e\u0431\u044b TSServer \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b \u0432 VSCode \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0435 \u043f\u0443\u0442\u0438 \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0432 .vscode\/settings.json \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:  &#171;js\/ts.preferences.importModuleSpecifier&#187;: &#171;non-relative&#187;,  &#171;js\/ts.preferences.importModuleSpecifierEnding&#187;: &#171;minimal&#187;,  \/\/ \u0411\u0430\u0433 TSServer (\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0432 tsgo) \u0441 preferTypeOnlyAutoImports:  \/\/ \u0430\u0432\u0442\u043e\u0438\u043c\u043f\u043e\u0440\u0442 \u043f\u0430\u0440\u043d\u044b\u0445 &lt;Tag&gt;&lt;\/Tag&gt; \u0434\u0430\u0451\u0442 import type \u0432\u043c\u0435\u0441\u0442\u043e import. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e &lt;Tag \/&gt; \u0438\u043b\u0438 &lt;Tag&gt;.`  \/\/ \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u043e\u043f\u0446\u0438\u0435\u0439 TypeScript: &#171;verbatimModuleSyntax: true&#187;.  &#171;js\/ts.preferences.preferTypeOnlyAutoImports&#187;: false,  \/\/ \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 style guide.  &#171;js\/ts.preferences.quoteStyle&#187;: &#171;single&#187;,\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u043e\u043f\u0446\u0438\u044f preferTypeOnlyAutoImports \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u043a\u0430\u043a \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430 verbatimModuleSyntax.\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 conditional subpath exports \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432\/\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0412 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 Turborepo \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430:Just-in-Time packagesCompiled packages.JIT packages \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u043c \u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432. Compiled packages \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u043c tsdown, \u0430 \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (Vite) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 &#8212; \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0430\u043d\u0441\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439).\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 JIT \u043f\u0430\u043a\u0435\u0442\u043e\u0432\u0422\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430 exports \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438.package.json:  &#171;exports&#187;: { &#171;.&#187;: &#171;.\/src\/index.ts&#187; }\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432\u0422\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-492097","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/492097","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=492097"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/492097\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=492097"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=492097"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=492097"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}