https://github.com/npm/read-cmd-shim/pull/6に従って、グローバルパッケージをインストールするときにPowerShellスクリプトを追加します。 これにより、Windowsでps1スクリプトを実行するためにセキュリティフラグを追加する必要があります。そうしないと、このエラーが発生します。
* *。このシステムでは実行中のスクリプトが無効になっているため、.ps1をロードできません
以前は、PowerShellが代わりにcmdスクリプトを使用するため、すべてのグローバルnpmパッケージはすぐに実行されていました。 この追加により、人々、特にWindows上のVisual StudioCodeの組み込みターミナルであるPowerShellを使用している人々の間で多くの混乱が生じると予想しています。
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
そして、以下のいくつかの新しい答えは、ps1ファイルを削除することを提案しています。
https://stackoverflow.com/questions/57673913/vsc-powershell-after-npm-updating-packages-ps1-cannot-be-loaded-because-runnin
@Cerlancism。 PowerShellで次のコマンドを入力します
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
または
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
.ps1PowerShellスクリプトを実行した後
@Cerlancism
https://github.com/npm/read-cmd-shim/pull/6では、PowerShellサポートからの抽出パスのみを追加しています。
この関数はhttps://github.com/npm/cli/pull/281用です
PowerShellスクリプトは、パイプライン入力がに渡されたときにstdinをNode.jsプロセス( https://github.com/npm/cmd-shim/pull/43 )にパイプする組み込みの方法を提供する唯一のスクリプトでもあり
最新のNPMを新しいマシンにインストールしたばかりですが、これは、箱から出してすぐに機能していたときは非常に厄介な動作です。
@ RAJU2529が提供するソリューションは、マシン上でやりたいことが何でもできる限り問題ありません。 ドメインに参加しているマシンでは、この設定は組織の設定によって駆動でき、ユーザーがマシンの管理者であっても上書きできません。
NPMバージョンのダウングレードを除いて、誰か別の回避策がありますか?
npm binディレクトリ内のすべての*.ps1
スクリプトを削除しますか?
@ ExE-ボスは私が今のところやったことですが、それは本当に回避策です...
上記にも同意します。 実行ポリシーを変更するよりも優れています...それが機能し、すべての人がスクリプトを実行している可能性が高いことはわかっていますが...完全にばかげています
最近、ビルドサーバーをノードの最新のLTSに更新しました。
PowerShellスクリプトの一部は次のようなコードを使用します。
Start-Process "npm-cli-login" [...] -NoNewWindow
PowerShellに使用する実行可能ファイル( (Get-Command npm-cli-login).Source
)を尋ねると、 cmdの代わりに新しく作成されたps1 -
ps1-scriptは有効な実行可能ファイルではないため、プロセスは%1 is not a valid win32 application
終了します。
これはバージョン内の重大な変更であり、少なくとも確認する必要があります。
npm binディレクトリ内のすべての
*.ps1
スクリプトを削除しますか?
npm link
またはnpm i -g ../<package>
使用中にWindowsに.ps1
スクリプトを作成させないようにする方法はありますか? npmフォルダーに移動して、この混乱を常にクリーンアップする必要があるのは、ちょっとイライラします。
システムにコマンドプロンプトがある場合の簡単な回避策の1つは、代わりにcmdバージョンを使用するようにPowerShellに指示することです。 <package-name>.cmd
たとえば、TypeScriptの場合:
の代わりに
tsc -v
これはPowerShellでtsc.ps1を呼び出すようになりました
使用するtsc.cmd -v
システムにコマンドプロンプトがある場合の簡単な回避策の1つは、代わりにcmdバージョンを使用するようにPowerShellに指示することです。
<package-name>.cmd
はい、 .cmd
追加すると、PowerShellは正しい実行可能ファイルを使用します。
ただし、リリース後に変更されるべきではないバージョン管理されたビルドスクリプトがある場合、2つの可能性しかありません。
この機能を追加したプルリクエスト34は、npm問題20699の修正として参照しています。 その問題を確認すると、コアの問題は、Windowsコマンドラインでコマンド引数としてアンパサンド文字を渡すことであるようです。 これはコマンド区切り文字として解釈されるため、エラーが発生します。
ただし、Windowsコマンドラインでは、キャレットを使用してアンパサンド文字をエスケープできます。 ^&
ロングショットですが、これは、これらの重大な変更を導入した実装されたものに対する実行可能な代替ソリューションである可能性がありますか? 引数がWindowsコマンドライン宛てで正規表現されていることを検出したり、キャレット文字をエスケープとして引数に挿入したりする方法はありますか? @ ExE-Bossのボスのような人は、似たようなものを使用してこの問題に対処できなかった理由があるかどうかを知っていますか?
次のドキュメントでは、Windowsコマンドライン引数の解析を処理するための最良の方法について説明します。 ガイドとして使用しますか?
https://docs.microsoft.com/en-us/archive/blogs/twistylittlepassagesallalike/everyone-quotes-command-line-arguments-the-wrong-way
これに関連するps1スクリプトを使用してパイプも機能していないと思います。
私は次のよく使われるツールを試しています:
prettyjson
よりきれい
たとえば、Powershellで次を実行すると次のようになります。
echo '{"a": 1}' | prettyjson
端末は、CTRL + Cが押されるまで入力を待機し続け、予期された出力なしで終了します。
回避策は、コマンドに.cmd
を追加するか、代わりにcmdを使用することです。
echo '{"a": 1}' | prettyjson.cmd
出力
a: 1
stackoverflowに関する私の質問: https :
申し訳ありませんが、 https: //github.com/npm/cli/issues/470#issuecomment -568165144の前にstdinパイピングについてコメントされており、PRはhttps://github.com/npm/cmd-shimにあります.cmd
とパイプで機能するようです。
最も参考になるコメント
npm binディレクトリ内のすべての
*.ps1
スクリプトを削除しますか?