在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"]
}

我怎样才能消除这些错误呢?


当前回答

outDir集。

"outDir": "./",

这个提示是,如果您不设置outDir,那么输出将直接放在输入文件的旁边。allowJs之后,JavaScript文件也会被编译。然后,编译后的JavaScript文件将覆盖源文件。这只是在提醒你。

其他回答

没有一个答案对我有用,所以我将分享可能导致这个问题的事情:

您应该添加outDir(或者至少是declarationDir)来排除。

"exclude": ["node_modules", "types"]

如果你的rootDir包含任何。js代码而没有指定outDir,那么它将尝试编译和覆盖原始的javascript,在这种情况下,你可以指定一个outDir。

"outDir": "lib"

这真的是一个“抓住你”的问题……如果你从任何地方导入任何东西,typescript都会编译,检查并生成它的类型声明。你的include或exclude里面有什么并不重要,你的rootDir设置为什么也不重要,如果你导入了一些东西,它就会被使用、输入、覆盖和输出,你之前的配置都不会被尊重。

例如,如果你有:

- /src
- tsconfig.json
- randomJsFile.js

:

"rootDir": "src"

And:

"include": ["src/**/*.ts"]

然后你将randomJSfile.js导入到任何/src文件的任何地方,它将生成一个*.d。Ts文件就在那个文件旁边(它甚至不会输出到你的类型目录),它会尝试覆盖那个文件。

简而言之,这意味着您应该注意导入的内容,不要将rootDir之外的任何内容导入到项目中(node_modules除外)。

这是一个让我试图从../webpack.config.js导入配置*.d。Ts类型为webpack生成(甚至不在types目录中,只是在那里随机放置,根本不尊重tsconfig),它也会尝试覆盖导入的文件并中断。一直想知道为什么当我导入配置时,完全随机的webpack类型开始出现在我的目录中。

如果您启用了增量构建,并且它只在某些时候中断(或者如果您删除了这些类型,但它们似乎(暂时)消失了),那么这就更有趣了。

添加"outDir": "。/dist”到tsconfig中的compilerOptions。json为我工作时,我得到这个错误。我很确定这只是Visual Studio Code TypeScript扩展输出这个错误。我使用ts-loader与Webpack,而不是tsc编译器直接,所以我不必指定outDir,因为Webpack配置控制,但如果这使VS Code扩展高兴,这是好的。

我也遇到了错误:无法写入文件'xx\xxx.js',因为它会覆盖输入文件。

我发现:

如果未指定outDir, .js文件将在生成它们的.ts文件的同一目录中生成。

为了避免意外覆盖源文件,编译器将显示此错误。

您需要指定outDir,或者设置noEmit: true,以避免生成类似JavaScript源代码的编译器输出文件。

将'dist'添加到tsconfig中排除的目录中。Json很适合我:

{
  "exclude": ["node_modules", "dist"]
}

当你在lerna包项目或monorepo项目中,它可能工作:


首先,你的项目是这样的

packages\
  core\
    tsconfig.json
    package.json 
  common\
    tsconfig.json
    package.json
  tsconfig.base.json

你package.json

  ...
  "main": "./lib/index.js",
  "types": "./lib/index.d.ts",
  "files": [
    "lib"
  ],
  ...

你tsconfig.json

{
  "extends": "../tsconfig.base.json",
  "compilerOptions": {
    "outDir": "./lib",
  },
}

您将发现无论如何更改tsconfig。Json文件,它不起作用


这就是我的解

先删除你的outDir:"lib",或者使用命令rd lib /s /q,然后运行tsc,就可以了