Skip to content

Commit f2a3d8e

Browse files
committed
feat(deps)!: remove deprecated skipNodeModulesBundle
Use `deps.neverBundle: true` instead, which externalizes all dependencies. tsup configs are migrated automatically by `tsdown-migrate`.
1 parent 26950f1 commit f2a3d8e

22 files changed

Lines changed: 40 additions & 287 deletions

‎__snapshots__/tsnapi/config.snapshot.d.ts‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ export interface UserConfig {
6868
external?: ExternalOption;
6969
noExternal?: Arrayable<string | RegExp> | NoExternalFn;
7070
inlineOnly?: Arrayable<string | RegExp> | false;
71-
skipNodeModulesBundle?: boolean;
7271
removeNodeProtocol?: boolean;
7372
bundle?: boolean;
7473
outExtension?: OutExtensionFactory;

‎__snapshots__/tsnapi/index.snapshot.d.ts‎

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ export interface DepsConfig {
2929
alwaysBundle?: Arrayable<string | RegExp> | NoExternalFn;
3030
onlyBundle?: Arrayable<string | RegExp> | false;
3131
onlyImport?: Arrayable<string | RegExp>;
32-
skipNodeModulesBundle?: boolean;
3332
resolveDepSubpath?: boolean;
3433
dts?: Pick<DepsConfig, "alwaysBundle" | "neverBundle">;
3534
}
@@ -93,7 +92,7 @@ export interface ReportOptions {
9392
brotli?: boolean;
9493
maxCompressSize?: number;
9594
}
96-
export interface ResolvedDepsConfig extends Pick<DepsConfig, "neverBundle" | "skipNodeModulesBundle" | "resolveDepSubpath"> {
95+
export interface ResolvedDepsConfig extends Pick<DepsConfig, "neverBundle" | "resolveDepSubpath"> {
9796
alwaysBundle?: NoExternalFn;
9897
onlyBundle?: Array<string | RegExp> | false;
9998
onlyImport?: Array<string | RegExp>;
@@ -196,7 +195,6 @@ export interface UserConfig {
196195
external?: ExternalOption;
197196
noExternal?: Arrayable<string | RegExp> | NoExternalFn;
198197
inlineOnly?: Arrayable<string | RegExp> | false;
199-
skipNodeModulesBundle?: boolean;
200198
removeNodeProtocol?: boolean;
201199
bundle?: boolean;
202200
outExtension?: OutExtensionFactory;
@@ -224,7 +222,7 @@ export type NoExternalFn = (_: string, _: string | undefined) => boolean | null
224222
export type NormalizedFormat = InternalModuleFormat;
225223
export type OutExtensionFactory = (_: OutExtensionContext) => OutExtensionObject | undefined;
226224
export type PackageType = "module" | "commonjs" | undefined;
227-
export type ResolvedConfig = Overwrite<MarkPartial<Omit<UserConfig, "workspace" | "fromVite" | "publicDir" | "bundle" | "injectStyle" | "removeNodeProtocol" | "outExtension" | "external" | "noExternal" | "inlineOnly" | "skipNodeModulesBundle" | "logLevel" | "failOnWarn" | "suppressWarnings" | "customLogger" | "envFile" | "envPrefix">, "globalName" | "inputOptions" | "outputOptions" | "minify" | "define" | "alias" | "onSuccess" | "outExtensions" | "hooks" | "copy" | "loader" | "name" | "banner" | "footer" | "checks" | "css">, {
225+
export type ResolvedConfig = Overwrite<MarkPartial<Omit<UserConfig, "workspace" | "fromVite" | "publicDir" | "bundle" | "injectStyle" | "removeNodeProtocol" | "outExtension" | "external" | "noExternal" | "inlineOnly" | "logLevel" | "failOnWarn" | "suppressWarnings" | "customLogger" | "envFile" | "envPrefix">, "globalName" | "inputOptions" | "outputOptions" | "minify" | "define" | "alias" | "onSuccess" | "outExtensions" | "hooks" | "copy" | "loader" | "name" | "banner" | "footer" | "checks" | "css">, {
228226
entry: Record<string, string>;
229227
rawEntry?: TsdownInputOption;
230228
nameLabel: string | undefined;

‎__snapshots__/tsnapi/plugins.snapshot.d.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* Generated by tsnapi — public API snapshot of `tsdown/plugins`
33
*/
44
// #region Functions
5-
export declare function DepsPlugin({ pkg, deps: { neverBundle, alwaysBundle: jsAlwaysBundle, onlyBundle, onlyImport, skipNodeModulesBundle, resolveDepSubpath: shouldResolveDepSubpath, dts }, logger, nameLabel, platform }: ResolvedConfig, _: TsdownBundle): Plugin;
5+
export declare function DepsPlugin({ pkg, deps: { neverBundle, alwaysBundle: jsAlwaysBundle, onlyBundle, onlyImport, resolveDepSubpath: shouldResolveDepSubpath, dts }, logger, nameLabel, platform }: ResolvedConfig, _: TsdownBundle): Plugin;
66
export declare function NodeProtocolPlugin(_: "strip" | true): Plugin;
77
export declare function ReportPlugin(_: ResolvedConfig, _?: boolean, _?: boolean): Plugin;
88
export declare function ShebangPlugin(_: Logger, _: string, _?: string, _?: boolean): Plugin;

‎docs/guide/migrate-from-tsup.md‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,12 @@ While `tsdown` aims to be highly compatible with `tsup`, there are some differen
5454

5555
Some options have been renamed for clarity:
5656

57-
| tsup | tsdown | Notes |
58-
| ---------------- | --------------- | ---------------------------------- |
59-
| `cjsInterop` | `cjsDefault` | CJS default export handling |
60-
| `esbuildPlugins` | `plugins` | Now uses Rolldown/Unplugin plugins |
61-
| `outExtension` | `outExtensions` | Custom output extensions |
57+
| tsup | tsdown | Notes |
58+
| ----------------------- | ----------------------------- | ---------------------------------- |
59+
| `cjsInterop` | `cjsDefault` | CJS default export handling |
60+
| `esbuildPlugins` | `plugins` | Now uses Rolldown/Unplugin plugins |
61+
| `outExtension` | `outExtensions` | Custom output extensions |
62+
| `skipNodeModulesBundle` | `deps: { neverBundle: true }` | Externalize all dependencies |
6263

6364
### Deprecated but Compatible Options
6465

@@ -73,7 +74,6 @@ The following tsup options still work in tsdown for backward compatibility, but
7374
| `injectStyle: true` | `css: { inject: true }` | Moved into CSS namespace |
7475
| `external: [...]` | `deps: { neverBundle: [...] }` | Moved to deps namespace |
7576
| `noExternal: [...]` | `deps: { alwaysBundle: [...] }` | Moved to deps namespace |
76-
| `skipNodeModulesBundle` | `deps: { neverBundle: true }` | Externalize all dependencies |
7777

7878
tsdown also adds `deps.onlyBundle` for whitelisting allowed bundled packages.
7979

‎docs/options/dependencies.md‎

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,6 @@ export default defineConfig({
3737
})
3838
```
3939

40-
### `deps.skipNodeModulesBundle`
41-
42-
::: warning Deprecated
43-
`skipNodeModulesBundle` is deprecated. Use [`deps.neverBundle: true`](#externalizing-all-dependencies) instead.
44-
:::
45-
4640
### `deps.resolveDepSubpath`
4741

4842
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`.
@@ -144,12 +138,12 @@ export default defineConfig({
144138
})
145139
```
146140

147-
When enabled, every import that follows npm package naming conventions (e.g. `lodash`, `@scope/pkg/utils`) is marked as external **as written, without being resolved**. This is faster than the deprecated `skipNodeModulesBundle` option and even works when dependencies are not installed. Note the following behaviors:
141+
When enabled, every import that follows npm package naming conventions (e.g. `lodash`, `@scope/pkg/utils`) is marked as external **as written, without being resolved**. This is fast and even works when dependencies are not installed. Note the following behaviors:
148142

149143
- Package specifiers are preserved exactly as written; subpaths like `my-dep/utils` are not rewritten, and `resolveDepSubpath` has no effect.
150144
- Other non-relative imports — [subpath imports](https://nodejs.org/api/packages.html#subpath-imports) starting with `#` and path aliases like `~/utils` — are still resolved: if they resolve into `node_modules`, they are kept external with the original specifier; otherwise the resolved local file is bundled.
151145

152-
Unlike the deprecated `skipNodeModulesBundle` option, `neverBundle: true` can be combined with `alwaysBundle` to bundle a few selected dependencies while externalizing everything else:
146+
`neverBundle: true` can be combined with `alwaysBundle` to bundle a few selected dependencies while externalizing everything else:
153147

154148
```ts [tsdown.config.ts]
155149
import { defineConfig } from 'tsdown'
@@ -202,13 +196,11 @@ export default defineConfig({
202196

203197
The following top-level options are deprecated. Please migrate to the `deps` namespace:
204198

205-
| Deprecated Option | New Option |
206-
| ---------------------------- | ------------------------ |
207-
| `external` | `deps.neverBundle` |
208-
| `noExternal` | `deps.alwaysBundle` |
209-
| `inlineOnly` | `deps.onlyBundle` |
210-
| `skipNodeModulesBundle` | `deps.neverBundle: true` |
211-
| `deps.skipNodeModulesBundle` | `deps.neverBundle: true` |
199+
| Deprecated Option | New Option |
200+
| ----------------- | ------------------- |
201+
| `external` | `deps.neverBundle` |
202+
| `noExternal` | `deps.alwaysBundle` |
203+
| `inlineOnly` | `deps.onlyBundle` |
212204

213205
## Summary
214206

‎docs/reference/cli.md‎

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,6 @@ Mark a module as external. This prevents the specified module from being include
7474

7575
See also [Dependencies](../options/dependencies.md).
7676

77-
## `--deps.skip-node-modules-bundle`
78-
79-
Skip resolving and bundling all dependencies from `node_modules`.
80-
81-
See also [Dependencies](../options/dependencies.md).
82-
8377
## `--external <module>` {#external}
8478

8579
::: warning Deprecated

‎docs/zh-CN/guide/migrate-from-tsup.md‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,12 @@ npx tsdown-migrate packages/foo packages/bar
5454

5555
部分选项已重命名以提高清晰度:
5656

57-
| tsup | tsdown | 说明 |
58-
| ---------------- | --------------- | ----------------------------- |
59-
| `cjsInterop` | `cjsDefault` | CJS 默认导出处理 |
60-
| `esbuildPlugins` | `plugins` | 现使用 Rolldown/Unplugin 插件 |
61-
| `outExtension` | `outExtensions` | 自定义输出扩展名 |
57+
| tsup | tsdown | 说明 |
58+
| ----------------------- | ----------------------------- | ----------------------------- |
59+
| `cjsInterop` | `cjsDefault` | CJS 默认导出处理 |
60+
| `esbuildPlugins` | `plugins` | 现使用 Rolldown/Unplugin 插件 |
61+
| `outExtension` | `outExtensions` | 自定义输出扩展名 |
62+
| `skipNodeModulesBundle` | `deps: { neverBundle: true }` | 外部化所有依赖 |
6263

6364
### 已弃用但兼容的选项
6465

@@ -73,7 +74,6 @@ npx tsdown-migrate packages/foo packages/bar
7374
| `injectStyle: true` | `css: { inject: true }` | 移入 CSS 命名空间 |
7475
| `external: [...]` | `deps: { neverBundle: [...] }` | 移入 deps 命名空间 |
7576
| `noExternal: [...]` | `deps: { alwaysBundle: [...] }` | 移入 deps 命名空间 |
76-
| `skipNodeModulesBundle` | `deps: { neverBundle: true }` | 外部化所有依赖 |
7777

7878
tsdown 还新增了 `deps.onlyBundle`,用于白名单指定允许打包的依赖。
7979

‎docs/zh-CN/options/dependencies.md‎

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,6 @@ export default defineConfig({
3737
})
3838
```
3939

40-
### `deps.skipNodeModulesBundle`
41-
42-
::: warning 已废弃
43-
`skipNodeModulesBundle` 已废弃,请使用 [`deps.neverBundle: true`](#外部化所有依赖) 代替。
44-
:::
45-
4640
### `deps.resolveDepSubpath`
4741

4842
默认情况下,tsdown 会保留外部依赖原有的子路径导入。当依赖没有 `exports` 字段时,可以启用 `resolveDepSubpath`,将子路径导入解析为包内的实际相对路径。例如,`my-dep/functions/lt` 可能会变为 `my-dep/functions/lt.js`,而 `my-dep/folder` 可能会变为 `my-dep/folder/index.js`。
@@ -144,12 +138,12 @@ export default defineConfig({
144138
})
145139
```
146140

147-
启用后,所有符合 npm 包名规范的导入(例如 `lodash`、`@scope/pkg/utils`)都会**按原样标记为外部依赖,不会进行解析**。这比已废弃的 `skipNodeModulesBundle` 选项更快,即使依赖没有安装也能正常工作。请注意以下行为:
141+
启用后,所有符合 npm 包名规范的导入(例如 `lodash`、`@scope/pkg/utils`)都会**按原样标记为外部依赖,不会进行解析**。这一过程非常快速,即使依赖没有安装也能正常工作。请注意以下行为:
148142

149143
- 包说明符会按原样保留;`my-dep/utils` 这类子路径不会被改写,`resolveDepSubpath` 选项不生效。
150144
- 其他非相对导入——以 `#` 开头的[子路径导入](https://nodejs.org/api/packages.html#subpath-imports)和 `~/utils` 这类路径别名——仍会被解析:如果解析结果位于 `node_modules` 中,则保留原始说明符并外部化;否则打包解析到的本地文件。
151145

152-
与已废弃的 `skipNodeModulesBundle` 选项不同,`neverBundle: true` 可以与 `alwaysBundle` 组合使用,在外部化其他所有依赖的同时打包少数指定依赖:
146+
`neverBundle: true` 可以与 `alwaysBundle` 组合使用,在外部化其他所有依赖的同时打包少数指定依赖:
153147

154148
```ts [tsdown.config.ts]
155149
import { defineConfig } from 'tsdown'
@@ -202,13 +196,11 @@ export default defineConfig({
202196

203197
以下顶层选项已被废弃,请迁移到 `deps` 命名空间:
204198

205-
| 废弃选项 | 新选项 |
206-
| ---------------------------- | ------------------------ |
207-
| `external` | `deps.neverBundle` |
208-
| `noExternal` | `deps.alwaysBundle` |
209-
| `inlineOnly` | `deps.onlyBundle` |
210-
| `skipNodeModulesBundle` | `deps.neverBundle: true` |
211-
| `deps.skipNodeModulesBundle` | `deps.neverBundle: true` |
199+
| 废弃选项 | 新选项 |
200+
| ------------ | ------------------- |
201+
| `external` | `deps.neverBundle` |
202+
| `noExternal` | `deps.alwaysBundle` |
203+
| `inlineOnly` | `deps.onlyBundle` |
212204

213205
## 总结
214206

‎docs/zh-CN/reference/cli.md‎

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,6 @@ tsdown --tsconfig tsconfig.build.json
7474

7575
另请参阅 [依赖处理](../options/dependencies.md)。
7676

77-
## `--deps.skip-node-modules-bundle`
78-
79-
跳过解析和打包所有来自 `node_modules` 的依赖。
80-
81-
另请参阅 [依赖处理](../options/dependencies.md)。
82-
8377
## `--external <module>` {#external}
8478

8579
::: warning 已废弃

‎skills/tsdown-migrate/SKILL.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ These tsup options still work in tsdown for backward compatibility, but emit dep
8686
| `injectStyle: false` | _(remove)_ | Default behavior |
8787
| `external: [...]` | `deps: { neverBundle: [...] }` | Moved to deps namespace |
8888
| `noExternal: [...]` | `deps: { alwaysBundle: [...] }` | Moved to deps namespace |
89-
| `skipNodeModulesBundle` | `deps: { neverBundle: true }` | Externalize all dependencies |
89+
| `skipNodeModulesBundle` | `deps: { neverBundle: true }` | Removed; externalize all dependencies |
9090

9191
### Output Filename Differences
9292

0 commit comments

Comments
 (0)