Skip to content

Commit d300fcc

Browse files
committed
feat(deps)!: disable resolveDepSubpath by default
1 parent 30c553d commit d300fcc

7 files changed

Lines changed: 56 additions & 24 deletions

File tree

docs/guide/how-it-works.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ When you publish a library, your consumers install its `dependencies`, `peerDepe
3838
| [`deps.onlyBundle`](../options/dependencies.md#deps-onlybundle) | Whitelist of dependencies allowed to be bundled. Any unlisted dependency that ends up in the bundle causes an error. Useful for catching accidental inlining in large projects. |
3939
| [`deps.neverBundle`](../options/dependencies.md#deps-neverbundle) | Explicitly mark additional packages as external (never bundled), or `true` to externalize all dependencies. |
4040
| [`deps.alwaysBundle`](../options/dependencies.md#deps-alwaysbundle) | Force specific packages to be bundled, even if they're in `dependencies`. |
41-
| [`deps.resolveDepSubpath`](../options/dependencies.md#deps-resolvedepsubpath) | Resolve external dependency subpath imports to their actual package-relative paths. |
41+
| [`deps.resolveDepSubpath`](../options/dependencies.md#deps-resolvedepsubpath) | Optionally resolve external dependency subpath imports to their actual package-relative paths. |
4242

4343
See [Dependencies](../options/dependencies.md) for details.
4444

docs/options/dependencies.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export default defineConfig({
3232
alwaysBundle: ['some-package'],
3333
onlyBundle: ['cac', 'bumpp'],
3434
onlyImport: ['cac'],
35-
resolveDepSubpath: false,
35+
resolveDepSubpath: true,
3636
},
3737
})
3838
```
@@ -45,21 +45,21 @@ export default defineConfig({
4545

4646
### `deps.resolveDepSubpath`
4747

48-
When an external dependency has no `exports` field, tsdown resolves subpath imports to their actual package-relative paths by default. For example, `my-dep/functions/lt` may become `my-dep/functions/lt.js`, and `my-dep/folder` may become `my-dep/folder/index.js`.
48+
By default, tsdown preserves external dependency subpath imports as written. Enable `resolveDepSubpath` to resolve subpath imports to their actual package-relative paths when a package has no `exports` field. For example, `my-dep/functions/lt` may become `my-dep/functions/lt.js`, and `my-dep/folder` may become `my-dep/folder/index.js`.
4949

50-
Set `resolveDepSubpath` to `false` to preserve the original import specifier:
50+
Set `resolveDepSubpath` to `true` to enable this behavior:
5151

5252
```ts [tsdown.config.ts]
5353
import { defineConfig } from 'tsdown'
5454

5555
export default defineConfig({
5656
deps: {
57-
resolveDepSubpath: false,
57+
resolveDepSubpath: true,
5858
},
5959
})
6060
```
6161

62-
The default value is `true`.
62+
The default value is `false`.
6363

6464
### `deps.onlyBundle`
6565

@@ -220,7 +220,7 @@ The following top-level options are deprecated. Please migrate to the `deps` nam
220220
- Use `deps.onlyImport` to whitelist packages the output is allowed to import at runtime.
221221
- Use `deps.neverBundle` to mark specific dependencies as external, or set it to `true` to externalize all dependencies.
222222
- Use `deps.alwaysBundle` to force specific dependencies to be bundled.
223-
- Set `deps.resolveDepSubpath` to `false` to preserve external dependency subpath imports as written.
223+
- Enable `deps.resolveDepSubpath` to resolve external dependency subpath imports to their package-relative paths.
224224
- **Declaration Files**:
225225
- The bundling logic for declaration files is now the same as for JavaScript.
226226
- Use `resolver: 'tsc'` for better compatibility with complex third-party types.

docs/zh-CN/guide/how-it-works.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ tsdown 读取你的 `package.json` 和 `tsconfig.json` 来推断合理的默认
3838
| [`deps.onlyBundle`](../options/dependencies.md#deps-onlybundle) | 允许打包的依赖白名单。任何不在列表中的依赖如果出现在 bundle 中将触发错误。适用于防止大型项目中的意外内联。 |
3939
| [`deps.neverBundle`](../options/dependencies.md#deps-neverbundle) | 显式将额外的包标记为外部依赖(不打包),设置为 `true` 时外部化所有依赖。 |
4040
| [`deps.alwaysBundle`](../options/dependencies.md#deps-alwaysbundle) | 强制打包特定的包,即使它们在 `dependencies` 中。 |
41-
| [`deps.resolveDepSubpath`](../options/dependencies.md#deps-resolvedepsubpath) | 将外部依赖的子路径导入解析为包内的实际相对路径。 |
41+
| [`deps.resolveDepSubpath`](../options/dependencies.md#deps-resolvedepsubpath) | 可选择将外部依赖的子路径导入解析为包内的实际相对路径。 |
4242

4343
详见[依赖](../options/dependencies.md)
4444

docs/zh-CN/options/dependencies.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export default defineConfig({
3232
alwaysBundle: ['some-package'],
3333
onlyBundle: ['cac', 'bumpp'],
3434
onlyImport: ['cac'],
35-
resolveDepSubpath: false,
35+
resolveDepSubpath: true,
3636
},
3737
})
3838
```
@@ -45,21 +45,21 @@ export default defineConfig({
4545

4646
### `deps.resolveDepSubpath`
4747

48-
当外部依赖没有 `exports` 字段时,tsdown 默认会将子路径导入解析为包内的实际相对路径。例如,`my-dep/functions/lt` 可能会变为 `my-dep/functions/lt.js`,而 `my-dep/folder` 可能会变为 `my-dep/folder/index.js`
48+
默认情况下,tsdown 会保留外部依赖原有的子路径导入。当依赖没有 `exports` 字段时,可以启用 `resolveDepSubpath`,将子路径导入解析为包内的实际相对路径。例如,`my-dep/functions/lt` 可能会变为 `my-dep/functions/lt.js`,而 `my-dep/folder` 可能会变为 `my-dep/folder/index.js`
4949

50-
`resolveDepSubpath` 设置为 `false` 可保留原始导入说明符
50+
`resolveDepSubpath` 设置为 `true` 可启用此行为
5151

5252
```ts [tsdown.config.ts]
5353
import { defineConfig } from 'tsdown'
5454

5555
export default defineConfig({
5656
deps: {
57-
resolveDepSubpath: false,
57+
resolveDepSubpath: true,
5858
},
5959
})
6060
```
6161

62-
默认值为 `true`
62+
默认值为 `false`
6363

6464
### `deps.onlyBundle`
6565

@@ -220,7 +220,7 @@ export default defineConfig({
220220
- 使用 `deps.onlyImport` 设置产物在运行时允许导入的包白名单。
221221
- 使用 `deps.neverBundle` 将特定依赖标记为外部依赖,或将其设置为 `true` 外部化所有依赖。
222222
- 使用 `deps.alwaysBundle` 强制将特定依赖打包。
223-
- `deps.resolveDepSubpath` 设置为 `false` 可保留外部依赖原有的子路径导入
223+
- 启用 `deps.resolveDepSubpath` 可将外部依赖的子路径导入解析为包内的相对路径
224224
- **声明文件**
225225
- 声明文件的打包逻辑与 JavaScript 保持一致。
226226
- 使用 `resolver: 'tsc'` 可提升复杂第三方类型的兼容性。

src/features/deps.test.ts

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ import {
99
import type { UserConfig } from '../config/types.ts'
1010

1111
describe('resolveDepsConfig', () => {
12-
it('enables dependency subpath resolution by default', () => {
13-
expect(resolveDepsConfig({}).resolveDepSubpath).toBe(true)
12+
it('disables dependency subpath resolution by default', () => {
13+
expect(!!resolveDepsConfig({}).resolveDepSubpath).toBe(false)
1414
expect(
1515
resolveDepsConfig({
16-
deps: { resolveDepSubpath: false },
16+
deps: { resolveDepSubpath: true },
1717
}).resolveDepSubpath,
18-
).toBe(false)
18+
).toBe(true)
1919
})
2020

2121
it('rejects skipNodeModulesBundle together with neverBundle: true', () => {
@@ -122,11 +122,31 @@ describe('DepsPlugin', () => {
122122
external: true,
123123
moduleSideEffects: undefined,
124124
})
125+
await expect(
126+
handler.call({ resolve }, 'some-dep/utils', '/project/src/index.ts', {}),
127+
).resolves.toEqual({
128+
id: 'some-dep/utils',
129+
external: true,
130+
moduleSideEffects: undefined,
131+
})
125132
expect(resolve).not.toHaveBeenCalled()
126133

127-
// subpath imports require resolution for `resolveDepSubpath`
134+
// subpath imports require resolution when `resolveDepSubpath` is enabled
135+
const subpathPlugin = DepsPlugin(
136+
{
137+
pkg: { dependencies: { 'some-dep': '^1.0.0' } },
138+
deps: resolveDepsConfig({ deps: { resolveDepSubpath: true } }),
139+
} as any,
140+
{ inlinedDeps: new Map() } as any,
141+
)
142+
const subpathHandler = (subpathPlugin.resolveId as any).handler
128143
await expect(
129-
handler.call({ resolve }, 'some-dep/utils', '/project/src/index.ts', {}),
144+
subpathHandler.call(
145+
{ resolve },
146+
'some-dep/utils',
147+
'/project/src/index.ts',
148+
{},
149+
),
130150
).resolves.toEqual({
131151
id: 'some-dep/utils',
132152
external: true,

src/features/deps.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ export interface DepsConfig {
9191
* Resolve dependency subpath imports to their actual package-relative paths
9292
* when externalizing packages without an `exports` field.
9393
*
94-
* @default true
94+
* @default false
9595
*/
9696
resolveDepSubpath?: boolean
9797

@@ -125,7 +125,7 @@ export function resolveDepsConfig(
125125
onlyBundle,
126126
onlyImport,
127127
skipNodeModulesBundle,
128-
resolveDepSubpath = true,
128+
resolveDepSubpath,
129129
} = config.deps || {}
130130

131131
if (config.external != null) {

tests/e2e.test.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1417,6 +1417,9 @@ describe('resolve dep subpath without exports field', () => {
14171417
dependencies: { 'my-dep': '^1.0.0' },
14181418
}),
14191419
},
1420+
options: {
1421+
deps: { resolveDepSubpath: true },
1422+
},
14201423
})
14211424

14221425
expect(fileMap['index.mjs']).toContain('my-dep/functions/lt.js')
@@ -1475,6 +1478,9 @@ describe('resolve dep subpath without exports field', () => {
14751478
dependencies: { 'my-dep': '^1.0.0' },
14761479
}),
14771480
},
1481+
options: {
1482+
deps: { resolveDepSubpath: true },
1483+
},
14781484
})
14791485

14801486
expect(fileMap['index.mjs']).toContain('my-dep/folder/index.js')
@@ -1502,7 +1508,10 @@ describe('resolve dep subpath without exports field', () => {
15021508
}),
15031509
},
15041510
options: {
1505-
deps: { skipNodeModulesBundle: true },
1511+
deps: {
1512+
resolveDepSubpath: true,
1513+
skipNodeModulesBundle: true,
1514+
},
15061515
},
15071516
})
15081517

@@ -1564,7 +1573,10 @@ describe('resolve dep subpath without exports field', () => {
15641573
}),
15651574
},
15661575
options: {
1567-
deps: { skipNodeModulesBundle: true },
1576+
deps: {
1577+
resolveDepSubpath: true,
1578+
skipNodeModulesBundle: true,
1579+
},
15681580
},
15691581
})
15701582

0 commit comments

Comments
 (0)