打字稿错误“无法写入文件......因为它会覆盖输入文件。”

问题描述 投票:25回答:11

在我的Visual Studio 2015 Update 3中的Typescript 2.2.1项目中,我在错误列表中收到了数百个错误,如:

无法写入文件'C:/ {{my-project}} / node_modules / buffer-shims / index.js',因为它会覆盖输入文件。

它看起来一直都是这样的。它实际上并没有阻止构建,并且一切正常,但错误列表分散注意力,并且在发生时很难找到“真正的”错误。

visual studio error list

这是我的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"]
}

我怎样才能摆脱所有这些错误?

visual-studio typescript visual-studio-2015 typescript2.0
11个回答
24
投票

我遇到了同样的问题。在我的情况下,这是选项的结果:allowJs: true

所以我基本上必须删除该行以摆脱错误。我在你的代码中没有看到它,但也许它可以帮到你。

祝好运!


0
投票

可能问题的根源是生成相同模块的2个文件。因此,如果同一个文件夹中有两个文件具有相同的名称但扩展名不同会导致此错误。

例如:

\index.ts
\index.tsx

解决方案是将其中一个文件名更改为其他名称。


0
投票

在我的情况下,由于同时开发了一个库和一个应用程序...

将具有从库导入的文件从应用程序移动到库,导致库中现在的文件将从其自己的dist文件夹中导入内容。

有趣的是..这实际上是最好的重构..它保持对文件的正确引用:)


0
投票

我遇到过同样的问题。在我的情况下,它是由于我在一个模块中有两个具有相同名称的文件:index.ts index.tsx。

我重命名了其中一个,问题得到解决。


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/**/*"
    ]
}

我们所要做的就是排除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!
    ]
}

4
投票

设置出去。

"outDir": "./",

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


4
投票

将'dist'添加到tsconfig.json中的排除目录中对我有用:

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

3
投票

添加“outDir”:tsconfig.json中的compilerOptions的“./dist”在我收到此错误时为我工作。我很确定这只是输出此错误的Visual Studio Code TypeScript扩展。我将ts-loader与Webpack一起使用而不是直接使用tsc编译器,所以我没有必要指定outDir,因为webpack配置控制了它,但是如果这使得VS Code扩展很开心那就很好。


1
投票

通过更新到Typescript 2.3.x似乎这个问题已得到修复

此外,使用Visual Studio 2017也是一项重大改进。我强烈建议您同时进行这两项更新。


1
投票

这有几个可能的原因。

  • 在你的tsconfig.json中: 将outDir设置为“dist”或另一个相同级别文件夹的名称。 (前缀为'./'是不必要的)。这是构建文件的位置。 将allowJs设置为false或删除该行。注意:启用后,allowJs将与声明设置/标志冲突。默认情况下不启用它。 在exclude中包含“dist”(或您的构建文件夹)。
  • 在你的package.json中: 将main设置为“index”或其他一些选定的名称。不要使用构建文件夹(例如“dist / index”)作为前缀,也不要使用不必要的“./”。 将typestypings的现代别名)设置为“index”。添加扩展名(.d.ts或.js)是不必要的。

虽然你可以拥有百万种不同的方式,但为了简单和理解,最好先坚持常见的做法 - 就像在树中同一级别使用“dist”,简单的tsconfig.json和package.json文件一样, 等等。当然,通过node_modules的文件生根也会加深你的掌握,但生活中还有更多有价值的东西。


0
投票

我也有这个问题。在我的情况下,我恢复了文件\tools\JsEngine\typescriptServices.js的原始版本,它解决了。

我发现由Visual Studio改变了typescriptServices.js,因为行(CRLF or CR)的结束,之后VS无法以正确的方式运行它。


0
投票

我通过从tsconfig.json文件中删除"declaration": true解决了这个问题。虽然现在我没有声明,所以没有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.