CBa*_*arr 34 visual-studio typescript visual-studio-2015 typescript2.0
在我的Visual Studio 2015 Update 3中的Typescript 2.2.1项目中,我在错误列表中收到了数百个错误,如:
无法写入文件'C:/ {{my-project}}/node_modules/buffer-shims/index.js',因为它会覆盖输入文件.
它看起来一直都是这样的.它实际上并没有阻止构建,并且一切正常,但错误列表分散注意力,并且在发生时很难找到"真正的"错误.
这是我的tsconfig.json档案
{
"compileOnSave": true,
"compilerOptions": {
"baseUrl": ".",
"module": "commonjs",
"noImplicitAny": true,
"removeComments": true,
"sourceMap": true,
"target": "ES5",
"forceConsistentCasingInFileNames": true,
"strictNullChecks": true,
"allowUnreachableCode": false,
"allowUnusedLabels": false,
"noFallthroughCasesInSwitch": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"typeRoots": [],
"types": [] //Explicitly specify an empty array so that the TS2 @types modules are not acquired since we aren't ready for them yet.
},
"exclude": ["node_modules"]
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能摆脱所有这些错误?
jca*_*ll1 40
由于 VSCode 自动完成文件dist/夹中的文件,我遇到了这个问题。
import { SomeClass } from '../../dist/xxx/someclass'
Run Code Online (Sandbox Code Playgroud)
要解决此问题,只需修复导入:
import { SomeClass } from './someclass'
Run Code Online (Sandbox Code Playgroud)
小智 29
我遇到了同样的问题.在我的情况下,这是选项的结果:allowJs: true.
所以我基本上必须删除该行以摆脱错误.我在你的代码中没有看到它,但也许它可以帮到你.
祝好运!
小智 26
所有答案都不适合我,所以我将分享可能导致此问题的事情:
outDir(或至少是declarationDir)添加到exclude。"exclude": ["node_modules", "types"]
Run Code Online (Sandbox Code Playgroud)
rootDir包含任何.js代码但未指定 ,outDir那么它将尝试编译并覆盖原始 javascript,在这种情况下您可以指定outDir."outDir": "lib"
Run Code Online (Sandbox Code Playgroud)
includeor里面有什么exclude,你的设置是什么也不重要rootDir,如果你导入一些东西,它将被使用、键入、覆盖和输出,并且你之前的配置都不会被尊重。例如,如果您有:
- /src
- tsconfig.json
- randomJsFile.js
Run Code Online (Sandbox Code Playgroud)
和:
"rootDir": "src"
Run Code Online (Sandbox Code Playgroud)
和:
"include": ["src/**/*.ts"]
Run Code Online (Sandbox Code Playgroud)
然后,您将其导入randomJSfile.js到任何 /src 文件中的任何位置,它将在该文件旁边生成一个*.d.ts文件(它甚至不会将其输出到您的类型目录),并且它将尝试覆盖该文件。
简而言之,这意味着您应该小心导入的内容,不要将任何外部的内容导入到您的rootDir项目中(node_modules 除外)。
这就是让我尝试为 webpackimport config from ../webpack.config.js生成*.d.ts类型的原因(甚至不在 types 目录中,只是随机放置在那里,根本不尊重 tsconfig),并且它还会尝试覆盖导入的文件并中断。一直想知道为什么当我导入配置时,完全随机的 webpack 类型开始出现在我的目录中。
如果您启用了增量构建并且它只会在某些时候中断(或者如果您删除了这些类型并且它们似乎仍然消失(目前)),那么这会更有趣。
Jai*_*Jai 25
这有几个可能的原因。
outDir为“dist”或另一个同级文件夹的名称。(不需要前缀“./”)。这是构建文件所在的位置。allowJs为false或删除该行。注意:启用后,allowJs将与声明设置/标志冲突。默认情况下不启用它。exclude.main为“索引”或其他选定的名称。不要使用构建文件夹(例如“dist/index”)作为前缀,也不要使用不必要的“./”。types(现代别名typings)设置为“索引”。添加扩展名(.d.ts 或 .js)是不必要的。尽管您可以拥有一百万种不同的方式,但为了简单起见并加深理解,最好首先坚持通用实践 - 例如在树中的同一级别使用“dist”、简单的tsconfig.json和package.json文件, 等等。当然,翻阅你的 node_modules 文件也会加深你的理解,但生活中还有更多有意义的事情。
Vin*_*rst 20
在我的实例中,我使用的是outFile选项,但没有从输入中排除目标目录.
// Bad
{
"compileOnSave": true,
"compilerOptions": {
"outDir": "./built",
"allowJs": true,
"target": "es5",
"allowUnreachableCode": false,
"noImplicitReturns": true,
"noImplicitAny": true,
"typeRoots": [ "./typings" ],
"outFile": "./built/combined.js"
},
"include": [
"./**/*"
],
"exclude": [
"./plugins/**/*",
"./typings/**/*"
]
}
Run Code Online (Sandbox Code Playgroud)
我们所要做的就是排除outDir中的好东西:
// Good
{
"compileOnSave": true,
"compilerOptions": {
"outDir": "./built",
"allowJs": true,
"target": "es5",
"allowUnreachableCode": false,
"noImplicitReturns": true,
"noImplicitAny": true,
"typeRoots": [ "./typings" ],
"outFile": "./built/combined.js"
},
"include": [
"./**/*"
],
"exclude": [
"./plugins/**/*",
"./typings/**/*",
"./built/**/*" // This is what fixed it!
]
}
Run Code Online (Sandbox Code Playgroud)
小智 12
当我收到此错误时,将 "outDir": "./dist" 添加到 tsconfig.json 中的 compilerOptions 对我有用。我很确定这只是 Visual Studio Code TypeScript 扩展输出此错误。我将 ts-loader 与 Webpack 一起使用,而不是直接使用 tsc 编译器,因此我不必指定 outDir,因为 webpack 配置控制它,但如果这使 VS Code 扩展满意那就太好了。
Kin*_*ng. 12
我也遇到这个错误:Cannot write file 'xx\xxx.js' because it would overwrite input file。
我发现这些:
如果outDir未指定,.js 文件将在生成它们的 .ts 文件所在的目录中发出。
为了避免意外覆盖源文件,编译器将显示此错误。
您需要指定outDir或设置noEmit: true以避免发出编译器输出文件(如 JavaScript 源代码)。
Rea*_*oon 12
就我而言,这是因为我不小心包含了 dist 目录中的一个类:
import {Entities} from "../../dist";
Run Code Online (Sandbox Code Playgroud)
刚刚删除了这条线,现在一切都很好。
Saj*_*jon 11
我也遇到了这个错误,其他答案都没有帮助我。查明它花了一段时间,但在浪费了至少一个小时之后,结果证明潜在的错误是我的单存储库中的包之间的循环依赖。
因此,我们使用 yarn 工作区并具有与 Zilliqas 非常相似的单一存储库结构(我们的存储库尚未开源,因此无法链接到它)。
在里面,package A我不小心(不知道如何...)从 导入了一个类型package B,但package B反过来又依赖于package A- 我已经明确指出packages/packageB/package.json:
"dependencies": {
...,
"@mycompany/packageA": "^0.0.0",
...
}
Run Code Online (Sandbox Code Playgroud)
这是正确的一口井。但不幸的是,package B在我的情况下可能会意外地导入一个类型,packages/packageA/_types.ts但由于我没有明确说明(因为依赖是隐含的、不需要的和偶然的),打字稿编译器 ( )packages/packageA/package.json下"dependencies"的这种依赖tsc没有检测到依赖循环,但仍然构建失败...
所以是的,感谢 TypeScript 提供了很棒的错误消息……哇,很多红鲱鱼。
我在相当大的 monorepo 中进行开发时遇到了这些错误,其中各种包依赖于对其他 TypeScript 包的引用。尽管这些错误不会影响构建或运行时,但打开文件时它们仍然出现在 VS Code 问题面板中tsconfig.json。
上面的一些答案确实帮助我减少了错误数量,但直到我重新启动 VS Code TypeScript 服务器后,所有错误似乎都神奇地消失了。
在 VS 代码中:
Shift+ command+P在 Mac 上打开命令面板。开始输入“TypeScript”并导航到“TypeScript:重新启动 TS Server”。按Enter
如果幸运的话,固定的错误应该会自动消失。
将``dist''添加到tsconfig.json中的排除目录对我有用:
{
"exclude": ["node_modules", "dist"]
}
Run Code Online (Sandbox Code Playgroud)
问题的根源可能是两个文件生成相同的模块。因此,如果同一文件夹中有两个文件名称相同但扩展名不同,则会导致此错误。
例如:
\index.ts
\index.tsx
Run Code Online (Sandbox Code Playgroud)
解决方案是将这些文件名之一更改为其他名称。
因为问题可能有多种原因!我将分享我遇到错误时的经验!
就我而言!我有两个文件!一个src/index.ts另一个上src/test/logToFile.directTest.ts。
排除src/test/logToFile.directTest.ts问题就解决了!似乎每个分辨率都试图写入同一个文件!
我的声明配置是:
{
"compilerOptions": {
"declaration": true,
"declarationDir": "./dist",
"module": "commonjs",
"noImplicitAny": true,
"lib": ["ESNext", "DOM"],
"outDir": "./dist",
"target": "es6",
"moduleResolution": "node",
"resolveJsonModule": true,
"esModuleInterop": true
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]
}
Run Code Online (Sandbox Code Playgroud)
一切都设置正确!您可以注意到我排除了该dist目录。并正确设置哪些outDir是必要的(如果不这样做,您可能会收到错误!所有其他答案都提到了这一点)。
更重要的是我将配置与其他存储库和包一起使用!而且我没有任何问题!
在最后 !是这样的:
import { Logger } from '../..';
Run Code Online (Sandbox Code Playgroud)
我的导入错误!
本来应该是:
import { Logger } from '..';
Run Code Online (Sandbox Code Playgroud)
将模块移植到它自己的存储库时我忘记更改导入!
我还包含了该文件!并进行了测试,一切正常!
并从故事中带来好处!
导入可以引用 root(例如)并自动重定向回 dist!.d.ts 文件也是如此!Typescript 通常应该抛出错误!因为那个目录文件夹脱颖而出!但事实并非如此!并犯了这个错误!
并为大家带来更多的利益
简而言之,这里描述的是:
https://github.com/microsoft/TypeScript/issues/6046#issuecomment-210186647
简而言之,输入文件要么是您在命令行上传递的文件,要么是您在命令行上传递的文件之一的依赖项。
如果两个映射到同一个声明文件!当他们同名时就会发生这种情况!或者参考声明文件本身!从文件导入!通过错误的导入(就像我的例子)!或者那个 dist 没有被忽略!
寻找进口产品是一件需要检查的事情!如果您排除了该目录并正确dist设置了outDir
非常有趣的是,您可以通过此命令检查输入文件:
import { Logger } from '../..';
Run Code Online (Sandbox Code Playgroud)
当问题出现时,您将在列表中找到声明文件!
小智 5
设置outDir。
"outDir": "./",
Run Code Online (Sandbox Code Playgroud)
此提示是,如果您未设置outDir,则输出将直接放置在输入文件旁边。在allowJs之后,JavaScript文件也将被编译。然后,已编译的JavaScript文件将覆盖您的源文件。只是想提醒您。
看来这个问题已经通过更新到 Typescript 2.3.x 为我解决了
此外,使用 Visual Studio 2017 也是一个很大的改进。我强烈建议您进行这两项更新。
| 归档时间: |
|
| 查看次数: |
18893 次 |
| 最近记录: |