tsc 不排除 npm 链接的 node_modules

作者:编程家 分类: typescript 时间:2025-11-17

使用 TypeScript 进行开发时,我们通常会使用 tsc(TypeScript 编译器)将 TypeScript 代码编译为 JavaScript 代码。然而,在一些特定的情况下,我们可能希望在编译过程中保留对 npm 链接的 node_modules 的引用,而不将其排除在编译范围之外。

在一些项目中,我们可能会使用 npm 链接(npm link)的方式将本地开发的模块链接到其他项目中进行测试或调试。这种方式可以让我们更方便地开发和测试模块,同时保持模块的独立性和可复用性。

然而,默认情况下,tsc 在编译过程中会将项目的依赖项从 node_modules 文件夹中排除在外,这意味着在编译后的 JavaScript 代码中,我们无法直接引用通过 npm 链接的模块。这可能会导致一些问题,特别是在一些需要动态加载模块的场景中。

为了解决这个问题,我们可以通过修改 tsconfig.json 文件来告诉 tsc 不要排除 node_modules 中的模块。我们可以添加一条 "include" 配置项,并将其值设置为 "node_modules/**/*",以确保 node_modules 文件夹中的所有模块都被包含在编译的范围之内。

下面是一个示例的 tsconfig.json 文件的配置:

json

{

"compilerOptions": {

"target": "es5",

"module": "commonjs",

"allowJs": true,

"outDir": "dist",

"esModuleInterop": true

},

"include": [

"src",

"node_modules/**/*"

]

}

在上面的示例中,我们将 include 配置项添加到了 tsconfig.json 文件中,并指定了需要包含在编译范围内的文件夹。其中,"src" 表示项目源代码所在的文件夹,"node_modules/**/*" 表示包含 node_modules 文件夹及其所有子文件夹中的内容。

这样配置后,tsc 在编译过程中将会包含 node_modules 中的模块,我们就可以在编译后的 JavaScript 代码中直接引用通过 npm 链接的模块了。

示例代码:

假设我们有一个名为 "my-module" 的模块,我们希望将其通过 npm 链接的方式引入到另一个项目中进行测试。首先,在 "my-module" 的根目录下执行以下命令:

npm link

然后,在另一个项目的根目录下执行以下命令,将 "my-module" 链接到当前项目中:

npm link my-module

最后,我们可以在当前项目的代码中直接引用 "my-module":

typescript

import { sayHello } from 'my-module';

sayHello();

通过以上配置和示例代码,我们可以轻松地使用 npm 链接将本地开发的模块链接到其他项目中,并在编译后的 JavaScript 代码中正常引用这些模块。这种方式可以提高开发效率,同时保持了模块的独立性和可复用性。

通过对 tsconfig.json 文件的配置,我们可以告诉 tsc 在编译过程中不要排除 npm 链接的 node_modules,以便在编译后的 JavaScript 代码中正常引用这些模块。这种方式可以提高开发效率,并保持模块的独立性和可复用性。