是否可以让 Typescript 知道 package.json 中定义的依赖版本?
Is it possible to make Typescript aware of the dependency versions defined in the package.json?
我已经意识到,当我 运行 对具有特定依赖项的项目执行 tsc 时,只要在我的系统中节点模块解析路径中的任何位置存在任何版本的依赖项,编译就会成功。
例如:
- 在一个由包含两个包(project_1 和 project_2)的 yarn 工作区管理的 monorepo 中
- 如果 project_1 在其 package.json[=34 中声明了依赖项 dep_1 =]
- 在运行ning yarn install so dep_1之后被添加到root node_modules
我现在可以在 project_2 中使用 dep_1 的导入语句,而无需添加 dep_1 到 project_2 的 package.json 并且 tsc 不会在编译时抱怨。
是否可以更改此行为以使 Typescript 知道每个项目 package.json 中声明的依赖项?
这是提升包裹的固有问题,也是周围许多包裹被搞砸的原因。然而,TSLint 提供了 no-implicit-dependencies
规则来防止导入未列为直接依赖项的提升包。
请注意,这并非特定于 TypeScript。您可以从普通 JavaScript 执行相同的操作。提升是固有的。
我已经意识到,当我 运行 对具有特定依赖项的项目执行 tsc 时,只要在我的系统中节点模块解析路径中的任何位置存在任何版本的依赖项,编译就会成功。
例如:
- 在一个由包含两个包(project_1 和 project_2)的 yarn 工作区管理的 monorepo 中
- 如果 project_1 在其 package.json[=34 中声明了依赖项 dep_1 =]
- 在运行ning yarn install so dep_1之后被添加到root node_modules
我现在可以在 project_2 中使用 dep_1 的导入语句,而无需添加 dep_1 到 project_2 的 package.json 并且 tsc 不会在编译时抱怨。
是否可以更改此行为以使 Typescript 知道每个项目 package.json 中声明的依赖项?
这是提升包裹的固有问题,也是周围许多包裹被搞砸的原因。然而,TSLint 提供了 no-implicit-dependencies
规则来防止导入未列为直接依赖项的提升包。
请注意,这并非特定于 TypeScript。您可以从普通 JavaScript 执行相同的操作。提升是固有的。