Protractor: Paket rilis NPM harus menggantikan `globals.ts` dengan `globals.d.ts`

Dibuat pada 18 Agu 2016  ·  3Komentar  ·  Sumber: angular/protractor

Laporan bug

  • Versi Simpul: 6.3.1
  • Versi Busur Derajat: 4.0.3
  • Versi Naskah: 2.0.0

    Gambaran

Ini khusus untuk proyek TypeScript dengan file sumber yang mengimpor protractor/globals . Khususnya, ketika mengimpor protractor/globals , karena rilis NPM menyertakan file globals.ts alih-alih file definisi yang sesuai ( globals.d.ts ) kompiler TypeScript akan menghitung root sumber umum proyek TypeScript yang dikonsumsi ke jalur umum antara ketergantungan busur derajat global.ts (kemungkinan node_modules/protractor ) dan di mana pun sumber proyek yang dikonsumsi terkandung (misalnya, src/test/**/*.ts ). Ini mengarahkan kompiler untuk mengeluarkan file sumber dengan semua direktori induk disertakan.

Perhatikan bahwa ini murni masalah di mana kompiler TypeScript mengeluarkan file yang dikompilasi; kompilasi terjadi dengan baik, dan busur derajat dikonsumsi (luar biasa) seperti yang diharapkan.

Langkah-langkah untuk Reproduksi

Untuk mendemonstrasikan skenario yang saya gambarkan dengan lebih baik, silakan lihat contoh project .

Solusi yang Diusulkan

Saya menduga menyelesaikan ini di sini akan menjadi kombinasi dari dua hal:

  1. perbarui proses kompilasi tegukan saat ini untuk memastikan file definisi dibuat ketika file globals.ts dikompilasi; dan
  2. perbarui proses rilis NPM Protractor (baik manual atau otomatis) untuk menghapus file globals.ts dari paket rilis NPM, hanya menyisakan file javascript yang dikompilasi dan file definisi yang sesuai.

Jika ini bagus, saya akan dengan senang hati mengirimkan permintaan tarik untuk menangani bagian pertama dari solusi. Jika proses rilis ke NPM masih mengikuti dokumen rilis proyek , saya juga akan dengan senang hati memperbaruinya dengan langkah untuk menghapus file globals.ts , meskipun itu mungkin lebih baik ditangani oleh seseorang yang benar-benar melakukan rilis.

Sementara saya telah memikirkan ini dan percaya bahwa kompiler TypeScript berperilaku seperti yang diharapkan, beri tahu saya jika Anda tidak setuju karena saya masih basah kuyup dengan TypeScript.

(edit: memperbarui format untuk mencerminkan templat bug)

Komentar yang paling membantu

@cnishina senang contohnya membantu! Terima kasih atas tanggapan cepatnya, ini tampak hebat kecuali untuk satu hal yang mungkin membuat saya bingung: sementara perubahan Anda menghapus file global.ts dari paket NPM, tidak akan memiliki deklarasi globals.d.ts membuat impor protractor/globals tidak terlihat oleh kompiler TypeScript untuk menggunakan proyek?

Jadi saya kira bagian pertama dari proposal saya bukan untuk menghapus globals.js dikompilasi demi deklarasi globals.d.ts , tetapi untuk memiliki keduanya sehingga paket NPM akan berisi:

  • globals.js
  • global.d.ts

hanya tanpa file sumber globals.ts .

Saya percaya ini dapat dicapai dengan menggunakan tsc dengan flag --declaration saat mengkompilasi file global.ts . Misalnya, mengubah tugas tsc:globals gulp seperti di bawah ini akan berhasil, meskipun saya perhatikan ada juga tugas tsc dan tsc:w di package.json yang mungkin perlu diperbarui juga asalkan tidak mengubah kompilasi non-global secara negatif:

gulp.task('tsc:globals', function(done) {
  runSpawn(done, 'node', ['node_modules/typescript/bin/tsc', '--declaration', 'globals.ts'],
    'ignore');
});

Beri tahu saya jika saya melewatkan sesuatu, dan sekali lagi terima kasih atas perbaikan cepatnya! Omong-omong, menggunakan Busur Derajat dengan TypeScript adalah ledakan yang serius!

Semua 3 komentar

@tmeneau Terima kasih untuk masalah ini: Saya sangat menyukai contoh github... 👍 👍 👍

Jadi ini adalah efek samping saat menggunakan outDir. Misalnya jika outDir diatur ke output , selain file yang ditranspilasikan, output/node_modules/protractor/globals.js juga akan ditranspilasikan. Saya awalnya menyertakan file globals.ts karena (pada saat itu) setelah beberapa percobaan, Anda tidak dapat mengimpor jenis file tanpa memiliki file TypeScript.

Untuk melalui proposal:

  1. Tidak berfungsi karena globals.ts tidak bisa hanya berupa file deklarasi *d.ts karena kami menetapkan variabel dari namespace global.
  2. Setelah bereksperimen dengan exampleTypescript ini tampaknya berhasil. Saya memperbarui .npmignore untuk tidak menerbitkan file itu dan memutakhirkan busur derajat ke TypeScript 2. Lihat: https://github.com/angular/protractor/pull/3485

@cnishina senang contohnya membantu! Terima kasih atas tanggapan cepatnya, ini tampak hebat kecuali untuk satu hal yang mungkin membuat saya bingung: sementara perubahan Anda menghapus file global.ts dari paket NPM, tidak akan memiliki deklarasi globals.d.ts membuat impor protractor/globals tidak terlihat oleh kompiler TypeScript untuk menggunakan proyek?

Jadi saya kira bagian pertama dari proposal saya bukan untuk menghapus globals.js dikompilasi demi deklarasi globals.d.ts , tetapi untuk memiliki keduanya sehingga paket NPM akan berisi:

  • globals.js
  • global.d.ts

hanya tanpa file sumber globals.ts .

Saya percaya ini dapat dicapai dengan menggunakan tsc dengan flag --declaration saat mengkompilasi file global.ts . Misalnya, mengubah tugas tsc:globals gulp seperti di bawah ini akan berhasil, meskipun saya perhatikan ada juga tugas tsc dan tsc:w di package.json yang mungkin perlu diperbarui juga asalkan tidak mengubah kompilasi non-global secara negatif:

gulp.task('tsc:globals', function(done) {
  runSpawn(done, 'node', ['node_modules/typescript/bin/tsc', '--declaration', 'globals.ts'],
    'ignore');
});

Beri tahu saya jika saya melewatkan sesuatu, dan sekali lagi terima kasih atas perbaikan cepatnya! Omong-omong, menggunakan Busur Derajat dengan TypeScript adalah ledakan yang serius!

Yup... 👍 globals.d.ts harus tetap ada agar protractor/globals import bekerja. Saya memperbarui PR. Terima kasih!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat