Skip to content

Commit 5f3ce8b

Browse files
authored
feat: add resolve.tsconfigPaths option to resolve with tsconfig paths (#277)
1 parent 191dd85 commit 5f3ce8b

File tree

14 files changed

+103
-2
lines changed

14 files changed

+103
-2
lines changed

packages/vite/src/node/config.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -681,6 +681,7 @@ export const configDefaults = Object.freeze({
681681
noExternal: [],
682682
external: [],
683683
preserveSymlinks: false,
684+
tsconfigPaths: false,
684685
alias: [],
685686
},
686687

@@ -1934,6 +1935,17 @@ assetFileNames isn't equal for every build.rollupOptions.output. A single patter
19341935
)
19351936
}
19361937

1938+
if (
1939+
resolved.resolve.tsconfigPaths &&
1940+
resolved.experimental.enableNativePlugin === false
1941+
) {
1942+
resolved.logger.warn(
1943+
colors.yellow(`
1944+
(!) resolve.tsconfigPaths is set to true, but native plugins are disabled. To use resolve.tsconfigPaths, please enable native plugins via experimental.enableNativePlugin.
1945+
`),
1946+
)
1947+
}
1948+
19371949
return resolved
19381950
}
19391951

@@ -2177,6 +2189,7 @@ async function bundleConfigFile(
21772189
dedupe: [],
21782190
extensions: configDefaults.resolve.extensions,
21792191
preserveSymlinks: false,
2192+
tsconfigPaths: false,
21802193
packageCache,
21812194
isRequire,
21822195
builtins: nodeLikeBuiltins,

packages/vite/src/node/plugins/resolve.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,15 @@ export interface ResolveOptions extends EnvironmentResolveOptions {
114114
* @default false
115115
*/
116116
preserveSymlinks?: boolean
117+
/**
118+
* Enable tsconfig paths resolution
119+
*
120+
* This option does not have any effect if `experimental.enableNativePlugin` is set to `false`.
121+
*
122+
* @default false
123+
* @experimental
124+
*/
125+
tsconfigPaths?: boolean
117126
}
118127

119128
interface ResolvePluginOptions {
@@ -266,7 +275,7 @@ export function oxcResolvePlugin(
266275
tryIndex: options.tryIndex ?? true,
267276
tryPrefix: options.tryPrefix,
268277
preserveSymlinks: options.preserveSymlinks,
269-
tsconfigPaths: false,
278+
tsconfigPaths: options.tsconfigPaths,
270279
},
271280
environmentConsumer: partialEnv.config.consumer,
272281
environmentName: partialEnv.name,

packages/vite/src/node/ssr/fetchModule.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ export async function fetchModule(
5757
extensions: ['.js', '.cjs', '.json'],
5858
dedupe,
5959
preserveSymlinks,
60+
tsconfigPaths: false,
6061
isBuild: false,
6162
isProduction,
6263
root,
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { expect, test } from 'vitest'
2+
import { page } from '~utils'
3+
4+
test('import from .ts', async () => {
5+
await expect.poll(() => page.textContent('.ts')).toMatch('[success]')
6+
})
7+
8+
test('import from .js', async () => {
9+
await expect.poll(() => page.textContent('.js')).toMatch('[success]')
10+
})
11+
12+
test('fallback works', async () => {
13+
await expect.poll(() => page.textContent('.fallback')).toMatch('[success]')
14+
})
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default '[success] imported from fallback'
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<h1>Resolve: tsconfig paths</h1>
2+
3+
<h2>Import from .ts</h2>
4+
<p class="ts"></p>
5+
6+
<h2>Import from .js</h2>
7+
<p class="js"></p>
8+
9+
<h2>Fallback works</h2>
10+
<p class="fallback"></p>
11+
12+
<script type="module">
13+
function text(selector, text) {
14+
document.querySelector(selector).textContent = text
15+
}
16+
17+
import ts from './src/ts.ts'
18+
text('.ts', ts)
19+
20+
import js from './src/js.js'
21+
text('.js', js)
22+
23+
import fallback from '@fallback/fallback'
24+
text('.fallback', fallback)
25+
</script>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"name": "@vitejs/test-resolve-tsconfig-paths",
3+
"private": true,
4+
"version": "0.0.0",
5+
"type": "module",
6+
"scripts": {
7+
"dev": "vite",
8+
"build": "vite build",
9+
"debug": "node --inspect-brk ../../packages/vite/bin/vite",
10+
"preview": "vite preview"
11+
}
12+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default '[success] imported'
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default } from '@/imported'
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default } from '@/imported'

0 commit comments

Comments
 (0)