Cli: [PERTANYAAN] Perlunya Dukungan Skrip Powershell untuk Paket Global

Dibuat pada 11 Nov 2019  ·  13Komentar  ·  Sumber: npm/cli

Apa sebabnya


Sesuai https://github.com/npm/read-cmd-shim/pull/6 menambahkan Skrip PowerShell saat menginstal paket global. Ini menyebabkan beberapa kerumitan pada Windows yang perlu menambahkan bendera keamanan untuk menjalankan skrip ps1, jika tidak maka akan terjadi kesalahan ini

* * .ps1 tidak dapat dimuat karena menjalankan skrip dinonaktifkan pada sistem ini

Sebelumnya, semua paket npm global kehabisan kotak karena PowerShell akan menggunakan skrip cmd sebagai gantinya. Saya memperkirakan dengan penambahan ini akan menyebabkan banyak kebingungan di antara orang-orang, terutama mereka yang menggunakan terminal built-in Visual Studio Code di Windows, yaitu PowerShell.

Referensi

https://github.com/microsoft/TypeScript/issues/35031
https://stackoverflow.com/questions/58796490/tsc-ps1-cannot-be-loaded-because-running-scripts-is-disabled-on-this-system
Dan beberapa jawaban yang lebih baru berikut bahkan menyarankan untuk menghapus file ps1.
https://stackoverflow.com/questions/57673913/vsc-powershell-after-npm-updating-packages-ps1-cannot-be-loaded-because-runnin

Needs Discussion Question

Komentar yang paling membantu

Hapus semua *.ps1 skrip di direktori npm bin?

Semua 13 komentar

@Tokopedia ketik perintah berikut di PowerShell

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

atau

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine

setelah menjalankan skrip .ps1 PowerShell Anda

@Tokopedia
Di https://github.com/npm/read-cmd-shim/pull/6 , saya hanya menambahkan jalur ekstrak dari dukungan PowerShell.
Fungsi ini untuk https://github.com/npm/cli/pull/281

Jika Anda ingin tahu mengapa * .ps ditambahkan saat menginstal paket, silakan lihat ini: https://github.com/npm/cmd-shim/pull/34

Skrip PowerShell juga satu-satunya yang menyediakan cara bawaan untuk menyalurkan stdin melalui proses Node.js ( https://github.com/npm/cmd-shim/pull/43 ) ketika masukan pipeline telah diteruskan ke naskah.

Baru saja menginstal NPM terbaru di mesin baru dan ini merupakan perilaku yang sangat mengganggu saat digunakan untuk bekerja di luar kotak.

Solusi yang diberikan oleh @ RAJU2529 baik-baik saja selama Anda dapat melakukan apa pun yang Anda inginkan pada mesin Anda. Pada mesin yang bergabung dengan domain, pengaturan ini dapat didorong oleh pengaturan organisasi dan tidak dapat diganti, bahkan jika pengguna adalah admin pada mesin.
Apakah ada yang punya solusi lain, kecuali menurunkan versi NPM?

Hapus semua *.ps1 skrip di direktori npm bin?

@ ExE-Boss itulah yang akhirnya saya lakukan untuk saat ini, tetapi ini benar-benar solusi ...

Setuju dengan yang di atas juga. Lebih baik daripada mengubah kebijakan eksekusi Anda ... Saya tahu ini berhasil dan semua orang cenderung menjalankan skrip tetapi ... benar-benar konyol

Kami baru-baru ini memperbarui server build kami ke LTS node terbaru.
Beberapa PowerShell-Scripts kami menggunakan kode seperti:

Start-Process "npm-cli-login" [...] -NoNewWindow

Jika Anda bertanya PowerShell yang dieksekusi menggunakan ( (Get-Command npm-cli-login).Source ) Anda mendapatkan PS1 yang baru dibuat -Files bukan cmd.

Proses keluar dengan %1 is not a valid win32 application karena skrip ps1 tidak dapat dijalankan secara valid.

Ini adalah perubahan yang mengganggu dalam suatu versi dan setidaknya harus ditinjau.

Hapus semua *.ps1 skrip di direktori npm bin?

Apakah kita memiliki cara untuk memaksa Windows agar tidak membuat skrip .ps1 saat menggunakan npm link atau npm i -g ../<package> ? Agak frustasi harus membuka folder npm dan membersihkan kekacauan ini sepanjang waktu.

Satu solusi cepat jika sistem Anda memiliki Command Prompt adalah memberi tahu PowerShell untuk menggunakan versi cmd sebagai gantinya: <package-name>.cmd

Misalnya untuk TypeScript:
dari pada
tsc -v yang sekarang memanggil tsc.ps1 di PowerShell
menggunakan
tsc.cmd -v

Satu solusi cepat jika sistem Anda memiliki Command Prompt adalah memberi tahu PowerShell untuk menggunakan versi cmd sebagai gantinya: <package-name>.cmd

Ya, jika Anda menambahkan .cmd powershell menggunakan file eksekusi yang benar.

Tetapi jika Anda memiliki versi skrip build yang seharusnya tidak berubah setelah rilis, Anda hanya memiliki dua kemungkinan:

  • Ubah saja
  • Jangan perbarui node -> kemungkinan masalah keamanan.

Permintaan tarik 34 yang menambahkan fitur ini merujuknya sebagai perbaikan untuk masalah npm 20699 . Memeriksa masalah itu, sepertinya masalah intinya adalah meneruskan karakter ampersand sebagai argumen perintah pada baris perintah windows. Itu diartikan sebagai pembatas perintah sehingga error.

image

Namun, di baris perintah windows, kita bisa melepaskan karakter ampersand dengan tanda sisipan. ^&

image

Longshot, tetapi dapatkah ini menjadi solusi alternatif yang layak untuk apa yang diterapkan yang memperkenalkan perubahan yang merusak ini? Adakah cara agar kita dapat mendeteksi bahwa argumen ditujukan untuk baris perintah windows dan regex atau memasukkan karakter tanda sisipan ke dalam argumen sebagai pelarian? Apakah ada orang seperti @ Boss ExE-Boss yang tahu jika ada alasan mengapa kami tidak dapat mengatasi masalah ini menggunakan sesuatu yang serupa?

Dokumen berikut mencakup cara terbaik untuk menangani penguraian argumen baris perintah windows. Gunakan sebagai panduan?
https://docs.microsoft.com/en-us/archive/blogs/twistylittlepassagesallalike/everyone-quotes-command-line-arguments-the-wrong-way

Saya pikir pipa juga tidak berfungsi menggunakan skrip ps1 yang terkait dengan ini.

Saya mencoba menggunakan alat yang sangat sering digunakan berikut ini:
prettyjson
lebih cantik

Misalnya ketika saya menjalankan yang berikut di Powershell:
echo '{"a": 1}' | prettyjson

Terminal akan terus menunggu masukan sampai CTRL + C ditekan dan keluar tanpa keluaran yang diharapkan.

Solusinya adalah dengan menambahkan .cmd ke perintah atau cukup gunakan cmd sebagai gantinya:
echo '{"a": 1}' | prettyjson.cmd

Keluaran

a: 1

Pertanyaan saya tentang stackoverflow: https://stackoverflow.com/questions/62951533/why-pipes-are-not-working-on-powershell-for-various-nodejs-cli-tools

Memperbarui

Maaf, saya baru ingat itu dikomentari di sini sebelum https://github.com/npm/cli/issues/470#issuecomment -568165144 tentang pipa stdin dan PR ada di sini https://github.com/npm/cmd-shim / pull / 43 . Tapi tetap saja, menggunakan .cmd tampaknya berhasil untuk pipa.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat