Typescript: Kesalahan "Tidak dapat menulis file ... karena akan menimpa file input."

Dibuat pada 8 Mar 2017  ·  99Komentar  ·  Sumber: microsoft/TypeScript

Versi TypeScript: 2.2.1

Saat menggunakan Visual Studio 2015 Update 3 saya mendapatkan ratusan kesalahan dalam daftar kesalahan seperti:

Tidak dapat menulis file 'C:/{{my-project}}/node_modules/buffer-shims/index.js' karena akan menimpa file input.

Sepertinya ini sepanjang waktu. Itu tidak benar-benar mencegah pembangunan, dan semuanya berfungsi dengan baik, tetapi daftar kesalahan mengganggu dan sulit untuk menemukan kesalahan "nyata" ketika terjadi.

Visual Studio Error List

File 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 <strong i="17">@types</strong> modules are not acquired since we aren't ready for them yet.
  },
  "exclude": ["node_modules"]
}

Bagaimana saya bisa menyingkirkan semua kesalahan ini?

_(Saya juga telah memposting pertanyaan ini di StackOverflow tanpa tanggapan)_

Needs More Info

Komentar yang paling membantu

Saya menemukan perbaikan untuk saya. Dalam kasus saya, saya menggunakan outDir dan rootDir tanpa menentukan array files . Saat menambahkan jalur outDir ke array exclude semuanya tampak berfungsi normal.

{
    "compilerOptions": {
        ...,
        "outDir": "./dist",
        "rootDir": "./src",
    },
    "exclude": [
        "node_modules",
        "dist" <-- I had to add this to fix the errors
    ]
}

Mungkin TypeScript juga mengawasi konten folder dist meskipun disetel sebagai outDir .

Semua 99 komentar

Saya juga mendapatkan masalah yang sama.

apakah --allowjs disetel? dapatkah Anda membagikan proyeknya?

Maaf, saya tidak dapat membagikan proyek, dan tidak ada bendera yang tidak disetel. tsconfig.json ada di atas, dan kami hanya menggunakannya dengan VS2015 Update 3, yang hanya memicu build dengan MSBuild secara normal.

Saya memiliki rekan tim yang mengeluh tentang masalah yang sama yang terjadi pada mereka di proyek yang sama. Saya juga mengerjakan proyek di rumah di komputer berbeda yang memiliki masalah yang sama persis & pengaturan yang sama (TS 2.2.1, VS2015 U3, dll.)

apakah Anda melihat perilaku yang sama jika Anda membuat proyek sederhana dengan konfigurasi yang sama?

Kami memiliki masalah yang sama https://github.com/wc-catalogue/blaze-elements/issues/299 meskipun dengan definisi tipe akses tulis

@Hotell apakah Anda melihat ini tanpa "awesome-typescript-loader"? dapatkah Anda membagikan langkah-langkah repro dengan saya?

yup, seperti yang Anda lihat dalam masalah, outputnya adalah menjalankan tsc mentah untuk kedua kalinya.

screen shot 2017-03-10 at 5 08 04 pm

cukup klon repo https://github.com/wc-catalogue/blaze-elements

  • tekan yarn dari root
  • tekan yarn tsc -> kompilasi pertama kali (semuanya baik-baik saja) => folder definitions/ pertama kali dibuat
  • tekan yarn tsc lagi -> kesalahan

Kami mengalami masalah serupa -- versi TypeScript yang sama (2.2.1) dan Visual Studio 2015 (Pembaruan 3); pertama kali build berjalan, tidak ada kesalahan, tetapi setelah itu kami mendapatkan ratusan kesalahan ini.

Tampaknya semua kesalahan (untuk kami) ada di folder "node_modules", yang telah kami atur untuk dikecualikan dalam file tsconfig.json kami. -- Dari melihat bug serupa, sepertinya pengecualian tidak diperlakukan sama di versi TypeScript ini?

File tsconfig.json kami:

{
  "compilerOptions": {
    "noImplicitAny": false,
    "noEmitOnError": true,
    "removeComments": false,
    "sourceMap": true,
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true
  },
  "exclude": [
    "node_modules",
    "wwwroot",
    "aot",
    "AngularApp/main-aot.ts"

  ],
  "compileOnSave": true
}

Beberapa kesalahan yang kami dapatkan (semuanya sama, tetapi filenya berbeda):

Severity    Code    Description Project File    Line    Suppression State
Error   TS5055  Cannot write file 'C:/XYZ/Project.AppWeb/node_modules/zone.js/dist/zone.js' because it would overwrite input file.  TypeScript Virtual Projects     1   Active
Error   TS5055  Cannot write file 'C:/XYZ/Project.AppWeb/node_modules/events/events.js' because it would overwrite input file.  TypeScript Virtual Projects     1   Active
Error   TS5055  Cannot write file 'C:/XYZ/Project.AppWeb/node_modules/core-js/modules/_wks.js' because it would overwrite input file.   TypeScript Virtual Projects     1   Active
Error   TS5055  Cannot write file 'C:/XYZ/Project.AppWeb/node_modules/core-js/modules/_uid.js' because it would overwrite input file.   TypeScript Virtual Projects     1   Active
Error   TS5055  Cannot write file 'C:/XYZ/Project.AppWeb/node_modules/core-js/modules/_to-primitive.js' because it would overwrite input file.  TypeScript Virtual Projects     1   Active

Sekali lagi, jika kita menghapus folder "node_modules", build akan berfungsi sekali, tetapi setelah dibuat ulang, build akan gagal pada build berikutnya.

@Hotell saya tidak melihat ini secara lokal, apa yang saya lewatkan?

c:\test\14538\blaze-elements>yarn tsc
yarn tsc v0.18.1
$ "c:\test\14538\blaze-elements\node_modules\.bin\tsc"
Done in 5.46s.

c:\test\14538\blaze-elements>yarn tsc
yarn tsc v0.18.1
$ "c:\test\14538\blaze-elements\node_modules\.bin\tsc"
Done in 5.87s.

c:\test\14538\blaze-elements>dir /B definitions
packages
polyfills.d.ts
styles.d.ts
test-helpers.d.ts
vendors.d.ts

c:\test\14538\blaze-elements>yarn tsc
yarn tsc v0.18.1
$ "c:\test\14538\blaze-elements\node_modules\.bin\tsc"
Done in 4.48s.

@BrainSlugs83 jika Anda memiliki proyek repro, saya ingin melihatnya.

Saya juga menghadapi masalah yang sama, ini adalah kesalahannya:
screen shot 2017-03-16 at 23 34 13
Dan ini adalah tsconfig.json saya:
screen shot 2017-03-16 at 23 34 25

Karena saya tidak menggunakan TypeScript sama sekali, saya baru saja membuat tsconfig untuk melewati build, saya juga harus memilih target=ES6 jika tidak, saya mengalami kesalahan lain.

apakah tsconfig.json bagian dari proyek Anda? dan dapatkah Anda mengonfirmasi bahwa jenis kontennya adalah "Konten"? jika demikian, dapatkah Anda membagikan proyek Anda?

@mhegazy Hai, ya, saya dapat mengonfirmasi bahwa tsconfig.json disertakan dalam proyek:

screen shot 2017-03-17 at 19 53 12

Tapi maaf saya tidak tahu "tipe konten" apa yang Anda maksud, bisakah Anda menjelaskannya?

Saya tidak dapat membagikan proyek.

Di proyek saya, saya juga dapat mengonfirmasi bahwa file tsconfig disertakan dalam file proyek, dan terdaftar sebagai konten.

@max-favilli Saya pikir @mhegazy berarti "Bangun Tindakan" ketika berbicara tentang "tipe konten".

Pilih tsconfig.json di penjelajah solusi. Buka jendela Properties (tombol F4 secara default). Akan ada properti Build Action.

Terima kasih @kevindqc , @mhegazy ya "Build Action" disetel ke "content"
screen shot 2017-03-18 at 11 21 28

Bisakah Anda membagikan struktur proyek virtual Anda dengan saya, untuk mendapatkannya Anda perlu:

  • pergi ke Tools > Options > Text Editor > TypeScript > Project , dan centang Display Virtual Projects when no Solution is loaded ;
  • mulai ulang VS, dan buka file di proyek Anda
  • Anda sekarang akan melihat simpul baru di Solution Explorer Anda dengan nama TypeScript Virtual Project

@mhegazy seperti ini?

screen shot 2017-03-21 at 02 08 13

Terima kasih telah membantu.

Saya memiliki masalah yang sama. Saya juga tidak bisa membagikan proyeknya, tetapi saya akan mencoba memberikan informasi sebanyak mungkin.

Saya menonaktifkan kompilasi TypeScript di .csproj ( <TypeScriptCompileBlocked>true</TypeScriptCompileBlocked> )
Alih-alih itu dikompilasi oleh npm run build:prod , yang ada di acara build.

Kesalahan tidak selalu ada. Saya telah mencoba membuatnya muncul (ada yang ditampilkan di VS, jadi saya me-restart VS). Saya telah mencoba membangun proyek TypeScript, membangun solusi, menjalankan tes, menjalankan analisis kode, menjalankan cakupan kode, dll. Tidak ada yang memicunya. Kemudian, saat saya sedang menulis kalimat terakhir, kesalahan muncul. Jadi sepertinya ada beberapa tugas latar belakang yang melakukannya? Tampaknya terjadi sekitar 2 menit setelah saya memulai pembangunan (setidaknya 2-3 kali saya mencobanya)

Linimasa:
1:37:20 - Membuka Visual Studio
1:37:30 - Memulai pembuatan solusi
1:38:20 - Pembangunan selesai
1:39:39 - Muncul kesalahan

Saya perhatikan proyek saya masih menggunakan paket nuget v2.0.3 Microsoft.TypeScript.Compiler dan Microsoft.TypeScript.MSBuild . Saya memperbaruinya ke v2.2.1. Sejauh ini, tidak ada kesalahan. Akan memperbarui jika saya melihat kesalahan lagi. (Sunting: Saya melihat kesalahan lagi, meskipun butuh sedikit lebih lama, ~ 5 menit, tanpa saya melakukan apa pun selain membangun ketika saya membuka VS. Sebenarnya, saya bahkan tidak perlu membangun apa pun untuk mendapatkan kesalahan - cukup membuka proyek dan menunggu beberapa menit menunjukkan kesalahan)

Tentang paket nuget yang sudah ketinggalan zaman itu, apakah itu normal? Saya pikir saya mendapat sembulan untuk memutakhirkan alat TypeScript proyek saya ketika saya menginstal versi baru TypeScript, tetapi tampaknya itu hanya memperbarui <TypeScriptToolsVersion>2.2</TypeScriptToolsVersion> . Bukankah seharusnya juga memperbarui paket nuget?

Saya baru saja memperbarui ke TypeScript 2.2.1 dan mengalami masalah yang sama. Ini menandai semua node_modules tetapi kompiler tsc selesai tanpa masalah.

@mhegazy

@Hotell saya tidak melihat ini secara lokal, apa yang saya lewatkan?

benar, itu diperbaiki oleh https://github.com/wc-catalogue/blaze-elements/commit/cdb94bf8feb3a1ad7e21e6fce243e3322c1334cc

sry untuk jawaban yang tertunda dan thx 4 bantuan!

@Hotell @mhegazy Sepertinya tidak bekerja untuk saya.
Mungkin berfungsi jika Anda memiliki file d.ts di folder "definisi"?
Tapi saya tidak punya itu. Saya memiliki @types di bawah "node_modules" yang harus dikecualikan secara warisan?

@chrismbarr Bolehkah saya bertanya apakah Anda sudah menyelesaikan ini? Saya telah mengikuti utas dan bahkan melakukan perbaikan yang disarankan oleh @Hotell beberapa posting tetapi saya masih mendapatkan Kesalahan ini di Visual Studios. Mereka semua tampaknya berasal dari folder node_modules.

Apakah Anda dapat mengaktifkan logging terperinci dan mengirimkan hasilnya kepada kami? Setel variabel lingkungan sistem TSS_LOG ke nilai seperti -file C:/temp/logs/tsserver.log -level verbose (pastikan folder log ada). Kemudian setelah Anda mengulangi masalahnya, kirim/lampirkan log untuk dianalisis. (Catatan: Ini mungkin berisi data seperti jalur file dan daftar penyelesaian, jadi pastikan tidak ada data yang tidak ingin Anda bagikan di dalamnya).

Dalam pengujian saya, saya kadang-kadang melihat sistem proyek membangun tampilan proyek yang berisi file yang salah, menyebabkan kesalahan intermiten pada waktu yang tidak terduga. Saya ingin melihat apakah itu penyebabnya di sini.

Saya dapat memberikan alamat email saya jika Anda lebih suka mengirim file langsung daripada mengunggahnya (billti di microsoft dot com). Terima kasih.

@johnlee tidak, masih sama di VS2015. Namun, saya sudah mulai menggunakan Visual Studio 2017 dan saya tidak memiliki kesalahan di sana!

@billti Variabel ditambahkan, visual studio (2017) dimulai ulang, solusi dibangun kembali, tetapi file log tidak dibuat. Apa yang harus saya periksa?

Apakah ini pasti variabel lingkungan sistem (yaitu jika Anda membuka prompt perintah baru dan menjalankan SET TSS apakah pengaturannya terdaftar)? Jika bukan itu, apakah folder tempat log akan ditulis sudah ada (penebang tidak akan membuat direktori yang tidak ada). Selain itu, juga lebih aman untuk menggunakan garis miring ke depan daripada garis miring terbalik di jalan.

typescripterrors
:(

@billti Ok, saya baru saja memeriksa dan file log ada di sana sekarang. Silakan temukan di sini terlampir
tss-log.zip

Terima kasih. Saya melihat di log itu, dan saya tidak melihat kesalahan itu dilaporkan oleh panggilan apa pun di dalamnya. Apakah kesalahan pasti terjadi dalam jangka waktu yang dicakup oleh log ini?

@billti Ya, kesalahan terjadi setiap saat:
screen shot 2017-04-11 at 01 25 24

Mereka hanya ada secara permanen. Dan disegarkan di setiap build.

Semua kesalahan yang terkait dengan deklarasi variabel yang salah (masalah terpisah yang telah kami perbaiki untuk rilis mendatang). Masalah ini tentang Cannot write file... per judul dan tangkapan layar di atas. Apakah Anda tidak memiliki masalah Cannot write file... ?

@billti setelah memposting pesan saya sebelumnya (yang saya tinggalkan di sana sebagai demonstrasi kebodohan saya) saya menyadari kesalahannya dari jenis yang berbeda. Saya hanya bisa menebak pembaruan studio visual yang saya instal beberapa hari yang lalu menyelesaikan masalah aslinya. Tapi saya tidak yakin.
Saya menghilangkan kesalahan ini dari pesan sebelumnya hanya menghapus tipe dari @types.
Terima kasih banyak.

@billti Saya mencoba mengirim beberapa log kepada Anda, tetapi tidak ada yang dibuat. Saya telah menetapkan TSS_LOG ke -file C:/temp/logs/tsserver.log -level verbose di variabel sistem saya (bukan pengguna).

C:\temp\logs ada, dan saya memberikan kontrol penuh ke Everyone .

Jika saya me-restart VS2015 saya, tidak ada yang dibuat di dalam C:\temp\logs bahkan setelah saya mendapatkan semua kesalahan Cannot write file... . Jika saya mencoba mengetik node node_modules\typescript\lib\tsserver.js (dan CTRL+C segera) di prompt perintah baru, saya mendapatkan dua file log.

Maaf @kevindqc , saya tidak menyadari Anda menggunakan VS 2015. Pencatatan itu hanya berlaku untuk VS 2017 (yang sekarang menggunakan tsserver.js di luar proses untuk layanan bahasa).

Kembali dan melihat masalah Anda - jika Anda melihat daftar kesalahan berubah secara acak, saya yakin itu adalah masalah yang sama @zhengbli baru saja diperbaiki di https://github.com/Microsoft/TypeScript/pull/15080 .

@bilti np. Saya pikir masalah ini hanya terjadi di VS2015, bukan? Satu-satunya pengguna dengan masalah yang menggunakan VS2017 mengalami kesalahan yang berbeda terkait dengan pengetikan. Seseorang yang beralih dari VS2015 ke VS2017 mengatakan masalahnya hilang.

Juga, daftar kesalahan tidak berubah secara acak - daftar itu diisi secara acak, sekali, dengan semua kesalahan "Tidak dapat menulis .." yang menjadi topik masalah ini. Apakah Anda yakin #15080 memperbaikinya? Saya tidak melihat apa pun tentang masalah ini kecuali referensi yang Anda buat kemarin? Bagaimana saya bisa mengujinya? Saya melihat ada RC 2,3 tetapi dirilis 9 hari yang lalu sementara perbaikannya digabung 2 hari yang lalu :(

Saya juga melihat kesalahan tetap ada di daftar kesalahan saya bahkan setelah saya menutup solusinya.

Juga orang yang memposting proyek virtual TypeScript-nya adalah orang dengan kesalahan yang berbeda, jadi saya pikir itu tidak membantu. Ini milikku:
image

Apakah node_modules seharusnya ada di sana? Itu ada di tsconfig saya tidak termasuk. Itu tidak berisi semua yang dimiliki folder node_modules fisik saya (14 subfolder vs 854 subfolder di folder node_modules saya)

{
  "compilerOptions": {
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "module": "commonjs",
    "moduleResolution": "node",
    "noImplicitAny": true,
    "removeComments": false,
    "sourceMap": true,
    "suppressImplicitAnyIndexErrors": true,
    "target": "es5",
    "baseUrl": "./src",
    "skipLibCheck": true,
    "paths": {
    },
    "typeRoots": [
      "node_modules/@types"
    ]
  },
  "exclude": [
    "node_modules",
    "dist",
    "typings"
  ],
  "types": [
    "core-js",
    "jasmine",
    "lodash",
    "node",
    "webpack"
  ],
  "awesomeTypescriptLoaderOptions": {
    "forkChecker": true,
    "useWebpackText": true
  }
}

Belum ada kesalahan sejauh ini setelah memutakhirkan ke alat TS2.3. Terima kasih!
Sunting: Tidak. Kesalahan masih ada, hanya butuh waktu lebih lama untuk muncul.

Tampaknya masalah ini terkait dengan masalah ini . Contoh solusi untuk direproduksi - diunggah.

Saya menemukan perbaikan untuk saya. Dalam kasus saya, saya menggunakan outDir dan rootDir tanpa menentukan array files . Saat menambahkan jalur outDir ke array exclude semuanya tampak berfungsi normal.

{
    "compilerOptions": {
        ...,
        "outDir": "./dist",
        "rootDir": "./src",
    },
    "exclude": [
        "node_modules",
        "dist" <-- I had to add this to fix the errors
    ]
}

Mungkin TypeScript juga mengawasi konten folder dist meskipun disetel sebagai outDir .

Jika Anda memiliki outDir bawah root proyek Anda, dan Anda hanya memasukkan semua yang ada di bawah root, maka ini yang diharapkan. Umumnya Anda ingin memiliki output build Anda di tempat lain selain di dalam folder sumber proyek.

Sepertinya semua masalah di atas dibahas di utas ini atau masalah terkait. Beri tahu saya jika bukan itu masalahnya dan saya akan membuka kembali. Terima kasih!

@billti Saya berasumsi bahwa komentar Anda adalah tanggapan atas komentar saya sebelumnya? Jika demikian, terima kasih telah menjelaskan. Ini membuat masalah lebih jelas bagi saya sekarang seperti yang saya asumsikan ketika menentukan rootDir kompiler hanya akan menonton folder tertentu dan mengecualikan yang lainnya. Tapi perilaku saat ini masuk akal.

solusi terbaik adalah dari borislemke .
{ "compilerOptions": { ..., "outDir": "./dist", "rootDir": "./src", }, "exclude": [ "node_modules", "dist" <-- I had to add this to fix the errors ] }

Saya mengalami masalah yang sama dan menemukan bahwa salah satu impor saya salah mereferensikan kelas di folder dist saya EG
impor {ClassName} dari "../../dist/ClassName";

Karena kelas pengimpor berada di folder yang sama, saya mengubahnya menjadi:
impor {ClassName} dari "./ClassName";

dan semuanya dikompilasi lagi :)

Kami memiliki folder 'dist' yang telah ditentukan sebelumnya di aplikasi kami. Menghapus itu memperbaikinya untuk saya.

Saya pikir ini adalah masalah yang mendasarinya (Pembaruan Windows Creators terakhir):
visual-studio-2015-deletes-file-on-save-cordova-solusi

Cukup tambahkan folder "dist" Anda ke daftar pengecualian di tsconfig.json
mantan:
"kecualikan": ["node_modules", "dist"]

Saya memperbaikinya dengan menambahkan bagian Sertakan:

"include": [ "*.ts", ], "exclude": [ "node_modules" ]

Saya mengalami ini juga ketika menggunakan outDir yang berada di bawah direktori sources.

Bagaimana kompiler TypeScript tidak tahu secara default bahwa ia tidak boleh mencoba mengkompilasi hal-hal di outDir ? Itu tampak aneh. Menambahkan outdir ke daftar pengecualian memang memperbaikinya.

saya punya masalah dengan netbeans lol

Saya juga mendapatkan kesalahan ini ketika saya memiliki dua file foo.ts dan foo.tsx , yang keduanya akan dikompilasi ke foo.js , jelas.

  "compilerOptions": {
    "noEmit": true 
  }

Memperbaikinya untuk saya.

noEmit adalah solusi yang lebih baik jika Anda ingin telah menghasilkan *.js file yang akan dianalisis. Bagaimanapun, mereka tidak harus dihasilkan dengan tsc .

Dalam kasus saya, Ream.js menghasilkan .ream/**.js yang kemudian saya impor dengan import XXX from '#out/yyy' dalam kode saya (yang berfungsi, tetapi menghasilkan peringatan "Tidak dapat menulis file..." di VS Code).

Pada dasarnya, satu-satunya alasan untuk memiliki "noEmit": false adalah ketika Anda menggunakan tsc mentah. Untuk semua lingkungan lain ( ts-node / ts-node-dev , webpack, rollup) lebih aman untuk mengaktifkannya.

Seperti @uglikoyote yang berhasil bagi saya adalah menambahkan outdir ke array pengecualian. Tidak ada saran lain yang berhasil.

Saya merasa masalah ini terkait dengan ini:

Masalah terjadi pada saya karena saya menyetel "declaration": true di tsconfig.json , jadi ia marah tentang file d.ts di folder build, meskipun direktori berada di luar folder akar. Saya dapat melakukan build baru tanpa masalah, tetapi build apa pun setelah itu akan melempar: Cannot write file ... because it would overwrite input file. . Dari apa yang saya lihat di cerita lain, ini dulu berfungsi di versi lain, maka pasti ada sesuatu yang berubah.

Sama seperti saya memperbaiki masalah tentang file test.ts berada di luar rootDir saya harus menambahkan yang berikut ke tsconfig.json .

"exclude:" [ "./build" ]

Ini juga dapat terjadi dengan pewarisan konfigurasi. Setiap konfigurasi perlu menentukan outDir secara terpisah. Tampaknya jalur di outDir diselesaikan secara absolut. Bahkan mungkin bug dari sudut pandang pengguna.

{
  "extends": "../../base/tsconfig.json",
  "compilerOptions": {
    "outDir": "myOutDir"  // <--- Don't forget this
  }
}

Patut diperiksa juga jika Anda memiliki referensi yang salah dalam package.json ke "outDir"

"main": "lib/index.js",
  "typings": "lib/__types__",      <-------
  "devDependencies": {
    "@types/lodash.mapvalues": "^4.6.4",
    "@types/node": "^10.12.18",
    "@types/winston": "^2.4.4"
  }

Saya mengalami ini dalam sebuah proyek dengan referensi proyek. Tidak ada pengecualian yang penting, yang dilakukan adalah entri typings diisyaratkan oleh @elmpp.

Jadi ini akan menghasilkan TS5055: Cannot write file because it would overwrite input file dalam monorepo referensi proyek:

  "main": "lib/cjs/index.js",
  "module": "lib/esm/index.js",
  "typings": "lib/cjs/index.ts",

tetapi ini tidak akan melaporkan kesalahan:

  "main": "lib/cjs/index.js",
  "module": "lib/esm/index.js",
  "typings": "src/index.ts",

Jadi jelas saya perlu memanipulasi pra-penerbitan ini, atau menerbitkan src dalam paket.

Setelan:

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

memperbaikinya untuk saya ( outputDir adalah dist ).

Ini bisa luar biasa jika direktori keluaran dikecualikan secara default untuk tsc --watch .

Untuk referensi di masa mendatang, ini terjadi jika Anda mengimpor modul dari dalam modul itu sendiri.

Jadi melakukan import x from 'mymodule ketika di dalam mymodule akan memicu ini. Ini sangat samar, dan kemungkinan harus diperbaiki!

Demikian pula, saya mengalami masalah jika Anda memiliki index.ts dengan banyak baris seperti export * from './foo' , dan di salah satu file itu, saya mengimpor dengan import foo from '.' daripada import foo from './foo' di salah satu file yang diekspor.

Saya membenturkan kepala saya pada ini selama dua hari terakhir sampai saya menghapus index.ts dan mengalami kesalahan impor. Itu sangat tidak jelas.

Jadi saya pikir masalahnya adalah karena saya memiliki 2 proyek ts di repo yang sama. ( Angular & Nestjs ), tsconfig.json folder level 1 melakukan kesalahan ini. Saya memperbaikinya dengan meletakkan exception "public" , yang di publik adalah kode Angular milikku dengan tsconfig.json-nya sendiri.

Saya mengalami masalah ini karena saya tidak yakin mengapa ts-node tidak berfungsi maka saya tsc untuk memeriksa apakah masalahnya adalah TypeScript. Sebagai hasil dari tsc , saya sekarang memiliki lusinan file .js berdampingan dengan ts yang dapat saya konfirmasikan dengan menjalankan git status

image

Solusinya adalah git clean -f .

Dalam kasus saya, tampaknya VS Code telah mengimpor file secara otomatis dari folder dist alih-alih dari folder src . Memperbaiki itu memecahkan masalah.

Ini seharusnya tidak ditutup, TypeScript harus mencetak kesalahan yang memberi tahu Anda apa yang terjadi. Hampir tidak mungkin untuk mengetahuinya saat ini. Saya tidak yakin apa yang sering menyebabkannya, VSCode mungkin memperbarui referensi tsconfig.json secara tidak sengaja, tetapi itu memperlambat semuanya satu ton dan setiap kali tidak sepele untuk di-debug.

di proyek Vue, di root, ini berhasil untuk saya:

// tsconfig.json
{
    "include": ["./src/**/*"],
    "exclude": ["node_modules", "dist", "public"],
    "compilerOptions": {
      "module": "es2015",
      "outDir": "",
      "moduleResolution": "node",
      "target": "es5",
      "allowJs": true,
      "checkJs": true, // Type checking
    }
}

Setelah saya menambahkan
"outDir": "",
masalah telah hilang.

Tujuan saya di sini hanya untuk membuat kecerdasan ts berfungsi di file .js/vue.

Memiliki pesan kesalahan yang sama. Masalahnya adalah saya memiliki dua file dengan nama yang sama tetapi ekstensi berbeda di folder yang sama sehingga menghapus yang dengan ekstensi .js memperbaikinya.

Memiliki pesan kesalahan yang sama. Masalahnya adalah saya memiliki dua file dengan nama yang sama tetapi ekstensi berbeda di folder yang sama sehingga menghapus yang dengan ekstensi .js memperbaikinya.

Ya saya memiliki masalah yang sama. Saya telah mengganti nama file .tsx .ts yang dibuat ulang oleh VS-Code, menyebabkan masalah.

Tidak yakin bagaimana menyelesaikan ini dengan benar tetapi dalam kasus saya, saya baru saja menghapus "declaration": true dari tsconfig.json. File D.ts tidak diproduksi, tetapi saya tidak membutuhkannya.

Kepada siapa pun yang datang ke sini dengan googling pesan kesalahan serupa, izinkan saya membagikan temuan saya:

  1. Seperti yang Anda baca, kesalahan ini disebabkan karena kompiler TypeScript mencoba mengkompilasi file .js ke jalur yang sama.
  2. Kemungkinan besar Anda tidak ingin mengkompilasi file .js sama sekali. Jika memungkinkan, hapus allowJs: true dari tsconfig.json Anda atau --allow-js dari opsi CLI Anda.
  3. Jika Anda benar-benar membutuhkannya, Anda mungkin ingin mengecualikan file yang disebutkan dalam pesan kesalahan dari kompilasi. Beberapa orang di utas ini telah melakukan itu (mungkin tanpa menyadarinya) dengan menambahkan exclude: ... .

    • Berhati-hatilah untuk tidak menambahkan 'kecualikan' di bawah compilerOptions .

Semoga membantu 🙏

Saya perlu mengecualikan direktori lib/ build saya secara manual

Tampaknya ada bug di suatu tempat yang membuat beberapa opsi tidak kompatibel. Saya telah menemukan bahwa menggunakan
allowJS true +
rootDir + outDir : Oke
rootDir + outFile : NOK : rootDir tidak diperhitungkan : semua file di dir dan subdir diatur untuk dikompilasi dan berpotensi ditimpa.
beberapa kombinasi opsi lainnya dilarang.

"allowJs": true
"noEmit": true
bekerja untuk saya.

di proyek Vue, di root, ini berhasil untuk saya:

// tsconfig.json
{
    "include": ["./src/**/*"],
    "exclude": ["node_modules", "dist", "public"],
    "compilerOptions": {
      "module": "es2015",
      "outDir": "",
      "moduleResolution": "node",
      "target": "es5",
      "allowJs": true,
      "checkJs": true, // Type checking
    }
}

Setelah saya menambahkan
"outDir": "",
masalah telah hilang.

Tujuan saya di sini hanya untuk membuat kecerdasan ts berfungsi di file .js/vue.

thx, Ini bekerja untuk saya.

Jika Anda menggunakan TS hanya untuk pemeriksaan ketik SAJA (tanpa kompilasi) dan Anda memerlukannya dalam file .js , gunakan solusi @guaizi149 :

"compilerOptions": {
  "allowJS": true,
  "noEmit": true
}

Ini akan memberi tahu TS bahwa ia tidak perlu khawatir tentang kompilasi, oleh karena itu tidak ada file yang akan ditulis ulang dan tidak ada peringatan yang akan dipicu. Ini adalah solusi yang lebih baik untuk menggunakan outDir: "" .

Ini juga dapat terjadi dengan pewarisan konfigurasi. Setiap konfigurasi perlu menentukan outDir secara terpisah. Tampaknya jalur di outDir diselesaikan secara absolut. Bahkan mungkin bug dari sudut pandang pengguna.

{
  "extends": "../../base/tsconfig.json",
  "compilerOptions": {
    "outDir": "myOutDir"  // <--- Don't forget this
  }
}

Solusi ini bekerja seperti pesona bagi saya! tsconfig.json terlihat seperti ini sekarang:

{
  "compilerOptions": {
    "allowJs": true,
    "baseUrl": "../node_modules",
    "types": ["cypress"],
    "outDir": "myOutDir"
  },
  "include": ["**/*.*"]
}

"allowJs": true
"noEmit": true
bekerja untuk saya.

Terima kasih @guaizi149 , solusi Anda bekerja untuk saya 👍

Terpecahkan - telah memasukkan direktori dist di tsc build saya:

"exclude": [
    "node_modules"
  ]

--- pergi ke

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

Apakah dist folder build Anda?

Jika mengecualikan outDir tidak berhasil untuk Anda, coba periksa apakah Anda memiliki file duplikat dengan jalur dan nama file yang sama tetapi ekstensi berbeda.

Ini terjadi ketika file deklarasi tidak dikecualikan dari build. Kapan pun ini terjadi, pembuat mencoba membangun file ".d.ts" yang ada dan menggantinya dengan nama file yang sama. Jadi itu sebabnya Anda akan mendapatkan kesalahan: Cannot write file ... because it would overwrite input file.

Untuk mencegah hal ini, Anda dapat mengecualikan "outDir":"build" di file jour tsconfig.json:

"exclude": [
    "build",
    ....
]

atau jika Anda tidak memiliki outDir yang ditentukan, kecualikan semua d.ts . file ekstensi:

"exclude": [
    "**/*.d.ts"
    .....
]

Semoga ini membantu

@Abadii : mungkin itu karena saya menggunakan opsi -b saat mengkompilasi tetapi tidak satu pun dari pendekatan itu yang berhasil.

@Abadii : mungkin itu karena saya menggunakan opsi -b saat mengkompilasi tetapi tidak satu pun dari pendekatan itu yang berhasil.

Bisakah Anda membagikan file tsconfig.json dan versi tsc ?

@Abadii : Ini dia (tanpa pengecualian yang diperbarui dengan jelas). Versi tsc adalah 3.8.3:

{
    "compilerOptions": {
        "importHelpers": true,
        "target": "es6",
        "module": "CommonJS",
        "lib": ["es2018"],
        "downlevelIteration": true,
        "skipLibCheck": true,
        "strict": true,
        "moduleResolution": "node",
        "esModuleInterop": true,
        "experimentalDecorators": true,
        "outDir": "../lib",
        "sourceMap": true,
        "declaration": true
    },
    "exclude": ["node_modules"]
}

@Abadii : Ini dia (tanpa pengecualian yang diperbarui dengan jelas). Versi tsc adalah 3.8.3:

{
    "compilerOptions": {
        "importHelpers": true,
        "target": "es6",
        "module": "CommonJS",
        "lib": ["es2018"],
        "downlevelIteration": true,
        "skipLibCheck": true,
        "strict": true,
        "moduleResolution": "node",
        "esModuleInterop": true,
        "experimentalDecorators": true,
        "outDir": "../lib",
        "sourceMap": true,
        "declaration": true
    },
    "exclude": ["node_modules"]
}

Silahkan simak repo berikut ini. Saya telah menggunakan tsconfig.json Anda untuk membuat ulang kesalahan:

https://github.com/Abadii/tsconfig

PS Dan apa yang akan terjadi jika Anda menghapus folder ../lib Anda? Apakah itu akan membangun?

@Abadii : Ini akan dibangun jika saya menghapus folder build (sebenarnya itu hanya akan membangun jika saya menghapus/mengosongkan folder build). Ini benar bahkan jika saya exclude file deklarasi dan folder build.
FYI struktur proyeknya seperti ini:

project\
  lib\
    session.d.ts
    session.js
  src\
    session.ts
    tsconfig.json
  package.json 

dan saya membangun dengan: tsc -p ./src/tsconfig.json
(sebenarnya biasanya saya membangun dengan rm -rf ./lib && tsc -p src/tsconfig.json tapi itulah yang saya perbaiki di sini;))

@Abadii : Ini akan dibangun jika saya menghapus folder build (sebenarnya itu hanya akan membangun jika saya menghapus/mengosongkan folder build). Ini benar bahkan jika saya exclude file deklarasi dan folder build.

Jadi sekarang Anda tahu bahwa folder build menyebabkan masalah. Entah bagaimana, build tsc Anda tidak mengecualikan folder build Anda. Anda dapat mencoba menggunakan jalur absolut dalam pengecualian.
Saya juga mencatat bahwa folder build Anda berada di luar cakupan Anda ../lib . Mungkin itu juga alasan mengapa tidak dikecualikan. Coba ./lib sebagai outDir untuk memeriksa apakah itu mengubah perilaku
Jika Anda adalah pengguna windows, periksa kembali apakah jalur absolut yang ditentukan sudah benar.

@Abadii : Terima kasih, tetapi saya tidak dapat menggunakan jalur absolut karena saya mengerjakan proyek di banyak mesin dan tidak dapat menjamin struktur folder yang identik di semuanya. Bagi saya ini sepertinya bug - saya memberi tahu tsconfig untuk mengecualikan folder dan file deklarasi, tetapi ternyata tidak. Apakah ini harus dibuka kembali?

@Abadii : Terima kasih, tetapi saya tidak dapat menggunakan jalur absolut karena saya mengerjakan proyek di banyak mesin dan tidak dapat menjamin struktur folder yang identik di semuanya. Bagi saya ini sepertinya bug - saya memberi tahu tsconfig untuk mengecualikan folder dan file deklarasi, tetapi ternyata tidak. Apakah ini harus dibuka kembali?

Saya mengerti, mungkin hal terakhir yang dapat Anda coba adalah meletakkan file tsconfig Anda di project/tsconfig.json dan mengubah jalurnya. Saya juga kehabisan pilihan jika itu tidak berhasil, saya kira.

Mencoba:

  1. Pengaturan outDir -> tidak.
  2. Pengaturan allowJs: false -> tidak.
  3. Tidak termasuk .d.ts -> tidak.
  4. noEmit: true -> tidak.

Saya sudah mencoba setiap saran di utas ini. Kesalahan VSCode tidak hanya bertahan, tetapi juga merujuk ke file yang tidak ada lagi. ️

Mencoba:

  1. Pengaturan outDir -> tidak.
  2. Pengaturan allowJs: false -> tidak.
  3. Tidak termasuk .d.ts -> tidak.
  4. noEmit: true -> tidak.

Saya sudah mencoba setiap saran di utas ini. Kesalahan VSCode tidak hanya bertahan, tetapi juga merujuk ke file yang tidak ada lagi.

Apa yang terjadi ketika Anda mencoba membangun langsung melalui terminal?

Atur outDir dan pastikan untuk mengosongkannya sebelum membangun

@Abadii Jadi.... tampaknya alasan ini terjadi adalah, meskipun file JS tidak disertakan, file tersebut gagal karena merupakan modul CommonJS.... ....

Dengan kata lain, setelah semuanya memiliki impor/ekspor yang tepat, saya berhenti mendapatkan masalah ini. Jadi, berdasarkan komentar utas ini, dan banyaknya perbaikan, saya pikir ini adalah salah satu kesalahan ikan haring merah. Seperti, ketika ada masalah JS / Intellisense / kompilasi tipe X, maka VSCode melempar kesalahan Cannot write file . Tetapi, dalam kasus saya, ini diselesaikan dengan solusi LAIN daripada setiap solusi lain yang ditawarkan di utas ini. ️ Dan lagi, itu melemparkan kesalahan ini pada file yang _tidak ada_ dan _tidak akan diganti_. Jadi mungkin kesalahan adalah caching, dan kesalahan yang tidak diketahui menimbulkan kesalahan yang di-cache? Sesuatu seperti itu? Saya pikir seseorang perlu memeriksa kode di sekitar kesalahan khusus ini.

Berkomentar di sini karena itu adalah hal pertama yang muncul di pencarian google saya.

Saya juga mengalami masalah ini. Sepertinya beberapa bagian dari proses kompilasi tidak mengenali bahwa itu ada di dalam direktori yang dikecualikan.

Saya tidak melihat masalah jika saya melakukan ini:

  "exclude": ["**/*.d.ts", "dist", "node_modules"]

Saya melihat masalah jika saya melakukan ini:

  "exclude": ["dist/**/*.d.ts", "dist", "node_modules"]

atau ini:

  "exclude": ["**/dist/**/*.d.ts", "dist", "node_modules"]

Kesalahan terjadi meskipun fakta bahwa file yang dikeluhkan jelas ada di dalam dist :

error TS5055: Cannot write file '/Users/leila/dev/wip/jest-fp-ts/dist/index.d.ts' because it would overwrite input file.
error TS5055: Cannot write file '/Users/leila/dev/wip/jest-fp-ts/dist/matchers/index.d.ts' because it would overwrite input file.

Dalam kasus saya, saya memiliki pengaturan impor di mana src/index.ts mengimpor dan mengekspor ulang dari src/matchers/index.ts yang pada gilirannya mengimpor dan mengekspor ulang dari src/matchers/eitherMatchers/index.ts .

Dua file pertama adalah yang menyebabkan kesalahan kompilasi. File ketiga baik-baik saja. Jadi sepertinya ini terkait dengan bagaimana pohon impor/ekspor memengaruhi kompilasi.

Saya baru saja menemukan masalah ini ketika memiliki masalah yang sama, dan berpikir saya akan menambahkan apa yang menjadi milik saya seandainya orang lain menemukannya dengan cara yang sama.

Dalam kasus saya, saya memiliki monorepo dengan file tsconfig terpisah untuk setiap paket, yang semuanya berasal dari basis tsconfig. Setiap paket config memiliki entri references yang mengarah ke jalur paket yang bergantung padanya. Saya juga memiliki tsconfig.json di root repo yang menyertakan files: [] dan memiliki referensi ke semua direktori paket. Dengan cara ini saya dapat menjalankan tsc -b --watch dari root dan membuatnya dibangun kembali pada perubahan di seluruh proyek.

Ini bekerja dengan baik untuk beberapa waktu, kemudian tiba-tiba mulai melemparkan kesalahan ini meskipun tidak ada konfigurasi yang berubah.

Saya akhirnya melacaknya dengan mencoba membangun satu paket yang dilaporkan dalam kesalahan itu sendiri, daripada membangun keseluruhan proyek.

Ternyata masalahnya adalah saya telah mencoba mengimpor proyek itu sendiri. Nama paketnya adalah @my-project/utils , dan berfungsi dengan baik sampai saya memindahkan beberapa kode dari paket lain ke file dalam paket utils. Kode itu termasuk import stuff from '@my-project/utils'; dan itulah yang menyebabkan kesalahan. Dengan mengubah ke import stuff from '.'; alih-alih kesalahan hilang..

@jasonk Ini mungkin hanya mengungkapkan ketidaktahuan saya tetapi bukankah itu hanya berfungsi jika monorepo Anda dibundel bersama oleh sesuatu yang akan menyelesaikan semua impor tersebut (misalnya webpack)? Jika monorepo Anda terdiri dari modul yang dapat diterbitkan dan digunakan secara independen, mengubah ke impor relatif akan menyebabkan kesalahan bukan?

@Ghirigoro Tidak, masalahnya bukan karena saya menggunakan jalur paket, melainkan menggunakan jalur paket untuk mengimpor paket dari dalam dirinya sendiri. Bahkan tanpa TypeScript, itu tidak akan berhasil.

Pada dasarnya apa yang saya lakukan adalah setara dengan ini:

$ mkdir problem
$ cd problem
$ npm init -y
$ echo 'console.log( "WORKED!" );' > index.js
$ echo 'require( "problem" );' > test.js

Jika Anda kemudian mencoba menjalankannya dengan node:

$ node ./test.js
internal/modules/cjs/loader.js:985
  throw err;
  ^

Error: Cannot find module '/Users/jasonk/problem/test.js'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:982:15)
    at Function.Module._load (internal/modules/cjs/loader.js:864:27)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at internal/main/run_main_module.js:18:47 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

Jika Anda mengganti nama paket maka itu berfungsi dengan benar:

$ echo 'require( "." );' > test.js
$ node ./test.js
WORKED!

Saya menduga bahwa apa yang terjadi adalah ketika build dijalankan, semua paket lain yang diimpor dari @my-project/utils impor tersebut diselesaikan menjadi packages/utils (karena mereka memiliki entri yang benar di references array di tsconfig), jadi mereka dibangun secara normal. Tetapi karena paket itu tidak seharusnya mengimpor sendiri, impor itu diselesaikan menjadi node_modules/@my-project/utils , yang merupakan symlink ke packages/utils , tetapi TypeScript tidak mendeteksi bahwa mereka sebenarnya adalah proyek yang sama jadi itu mencoba membangunnya dua kali, tetapi karena kedua bangunan memiliki direktori keluaran yang sama, saya berakhir dengan kesalahan ini.

Ini terjadi ketika file deklarasi tidak dikecualikan dari build. Kapan pun ini terjadi, pembuat mencoba membangun file ".d.ts" yang ada dan menggantinya dengan nama file yang sama. Jadi itu sebabnya Anda akan mendapatkan kesalahan: Cannot write file ... because it would overwrite input file.

Untuk mencegah hal ini, Anda dapat mengecualikan "outDir":"build" di file jour tsconfig.json:

"exclude": [
    "build",
    ....
]

atau jika Anda tidak memiliki outDir yang ditentukan, kecualikan semua d.ts . file ekstensi:

"exclude": [
    "**/*.d.ts"
    .....
]

Semoga ini membantu

Tidak termasuk direktori build saya memecahkan masalah untuk saya

Kemungkinan besar, ini terjadi ketika Anda mencoba menjalankan satu proyek dengan dua node.
Untuk hipotesis ini, Anda dapat menguji jumlah proses di komputer Anda yang bernama "node" setelah menjalankan build.
Apa yang saya lakukan untuk menyelesaikan masalah:
Langkah 1.
Membandingkan
node -v
dan
nvm -ls , versi yang digunakan.
Di terminal atur versi simpul saat ini:
nvm use {neededVersion}
Pada prinsipnya, hapus versi node yang tidak perlu di nvm (ini akan membantu IDE Anda untuk secara otomatis menentukan versi normal dari node).
Langkah 2.
Tentukan node saat ini di IDE Anda. yaitu di WebStorm:
Preferensi->Bahasa & Kerangka Kerja -> Node.js dan NPM: Penerjemah simpul - atur versi yang diperlukan.
(Selain itu, Anda dapat memeriksa versi node untuk setiap item di mana saja (TypeScript))

Juga, masalah ini dapat terjadi jika paket npm atau submodul git menggunakan simpul mereka sendiri di dalamnya

Saya menghadapi masalah ini untuk proyek Webdriver IO/WDIO. Itu diselesaikan ketika saya menghapus "wdio.config.js" dari "include" di tsconfig.json.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat