Cli: [سؤال] ضرورة دعم Powershell Script للحزم العالمية

تم إنشاؤها على ١١ نوفمبر ٢٠١٩  ·  13تعليقات  ·  مصدر: npm/cli

ماذا / لماذا


وفقًا لـ https://github.com/npm/read-cmd-shim/pull/6 ، يضيف PowerShell Scripts عند تثبيت الحزم العالمية. يتسبب في بعض المتاعب على نظام Windows الذي يحتاج إلى إضافة علامة أمان لتشغيل البرنامج النصي ps1 ، وإلا فإنه يحصل على هذا الخطأ

لا يمكن تحميل * * .ps1 لأن البرامج النصية قيد التشغيل معطلة على هذا النظام

في السابق ، نفدت جميع حزم npm العامة لأن PowerShell سيستخدم البرنامج النصي cmd بدلاً من ذلك. أتوقع مع هذه الإضافة أنها ستسبب الكثير من الارتباك بين الناس ، وخاصة أولئك الذين يستخدمون المحطة المدمجة لـ Visual Studio Code على Windows ، وهي 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

Needs Discussion Question

التعليق الأكثر فائدة

هل تريد حذف كافة نصوص *.ps1 في دليل npm bin؟

ال 13 كومينتر

تضمين التغريدة اكتب الأوامر التالية في بوويرشيل

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

أو

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine

بعد تشغيل البرنامج النصي .ps1 PowerShell

تضمين التغريدة
في https://github.com/npm/read-cmd-shim/pull/6 ، أقوم فقط بإضافة مسار استخراج من دعم بوويرشيل.
هذه الوظيفة مخصصة لـ https://github.com/npm/cli/pull/281

إذا كنت تريد معرفة سبب إضافة * .ps عند تثبيت الحزمة ، فالرجاء الاطلاع على هذا: https://github.com/npm/cmd-shim/pull/34

نصوص PowerShell هي أيضًا البرامج النصية الوحيدة التي توفر طريقة مضمنة لتوجيه stdin إلى عملية Node.js ( https://github.com/npm/cmd-shim/pull/43 ) عند تمرير إدخال خط الأنابيب إلى النص.

فقط قم بتثبيت أحدث NPM على جهاز جديد وهذا سلوك مزعج للغاية أثناء استخدامه خارج الصندوق.

الحل المقدم من @ RAJU2529 جيد طالما يمكنك فعل ما تريد على جهازك. على الجهاز المرتبط بالمجال ، يمكن أن يكون هذا الإعداد مدفوعًا بإعدادات المؤسسة ولا يمكن تجاوزه ، حتى لو كان المستخدم مسؤولاً على الجهاز.
هل لدى أي شخص حل بديل آخر ، باستثناء تخفيض إصدار NPM؟

هل تريد حذف كافة نصوص *.ps1 في دليل npm bin؟

@ ExE-Boss هذا ما انتهيت من القيام به الآن ، لكنه في الحقيقة حل بديل ...

توافق على ما سبق أيضًا. أفضل من تغيير سياسة التنفيذ الخاصة بك ... أعلم أنها تعمل ومن المحتمل أن يقوم الجميع والأشخاص بتشغيل نصوص برمجية ولكن ... مجرد سخيفة تمامًا

لقد قمنا مؤخرًا بتحديث خوادم البناء الخاصة بنا إلى أحدث LTS من العقدة.
تستخدم بعض برامج PowerShell-Scripts الخاصة بنا رمزًا مثل:

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

إذا سألت بوويرشيل عن الملف القابل للتنفيذ الذي يستخدمه ( (Get-Command npm-cli-login).Source ) فإنك تحصل على ملفات ps1 التي تم إنشاؤها حديثًا بدلاً من cmd .

تنتهي العملية مع %1 is not a valid win32 application لأن نص ps1 ليس قابلاً للتنفيذ صالحًا.

هذا تغيير جذري في إصدار ويجب مراجعته على الأقل.

هل تريد حذف كافة نصوص *.ps1 في دليل npm bin؟

هل لدينا طريقة لإجبار Windows على عدم إنشاء البرنامج النصي .ps1 أثناء استخدام npm link أو npm i -g ../<package> ؟ إنه لأمر محبط نوعًا ما أن تضطر إلى الانتقال إلى مجلد npm وتنظيف هذه الفوضى طوال الوقت.

أحد الحلول السريعة إذا كان نظامك يحتوي على موجه الأوامر هو إخبار PowerShell باستخدام إصدار cmd بدلاً من ذلك: <package-name>.cmd

على سبيل المثال لـ TypeScript:
بدلا من
tsc -v الذي يستدعي الآن tsc.ps1 في PowerShell
استعمال
tsc.cmd -v

أحد الحلول السريعة إذا كان نظامك يحتوي على موجه الأوامر هو إخبار PowerShell باستخدام إصدار cmd بدلاً من ذلك: <package-name>.cmd

نعم ، إذا قمت بإضافة .cmd بوويرشيل ، فسيستخدم الملف القابل للتنفيذ الصحيح.

ولكن إذا كان لديك إصدار نصوص برمجية يجب ألا تتغير بعد الإصدار ، فلديك احتمالان فقط:

  • قم بتغييره على أي حال
  • لا تقم بتحديث العقدة -> مشكلة أمنية محتملة.

يشير طلب السحب 34 الذي أضاف هذه الميزة إلى أنه إصلاح لمشكلة npm 20699 . عند التحقق من هذه المشكلة ، يبدو أن المشكلة الأساسية هي تمرير حرف العطف كوسيطة أمر في سطر أوامر windows. يتم تفسير ذلك على أنه محدد الأوامر لذا فهو يخطئ.

image

ومع ذلك ، في سطر أوامر windows ، يمكننا الهروب من حرف العطف بحرف الإقحام. ^&

image

Longshot ، ولكن هل يمكن أن يكون هذا حلاً بديلاً عمليًا لما تم تضمينه والذي أدى إلى حدوث هذه التغييرات العاجلة؟ هل هناك طريقة ما يمكننا من خلالها اكتشاف أن الحجة مخصّصة لسطر أوامر windows و regex أو إدخال حرف الإقحام في الوسيطة كمهرب؟ هل يعرف أي شخص مثل @ ExE-Boss boss ما إذا كان هناك سبب لعدم تمكننا من معالجة هذه المشكلة باستخدام شيء مشابه؟

يغطي المستند التالي أفضل طريقة للتعامل مع تحليل وسيطة سطر أوامر Windows. استخدمه كدليل؟
https://docs.microsoft.com/en-us/archive/blogs/twistylittlepassagesallalike/everyone-quotes-command-line-arguments-the-wrong-way

أعتقد أن الأنابيب لا تعمل أيضًا باستخدام البرامج النصية ps1 المتعلقة بهذا.

أحاول استخدام الأدوات التالية الأكثر استخدامًا:
جميلة
أجمل

على سبيل المثال عندما أقوم بتشغيل ما يلي على Powershell:
echo '{"a": 1}' | prettyjson

ستستمر المحطة في انتظار المدخلات حتى يتم الضغط على CTRL + C وتخرج بدون إخراج متوقع.

الحل هو إضافة .cmd إلى الأمر أو مجرد استخدام cmd بدلاً من ذلك:
echo '{"a": 1}' | prettyjson.cmd

النواتج

a: 1

سؤالي عن stackoverflow: https://stackoverflow.com/questions/62951533/why-pipes-are-not-working-on-powershell-for-various-nodejs-cli-tools

تحديث

عذرًا ، لقد تذكرت للتو أنه تم التعليق عليه هنا قبل https://github.com/npm/cli/issues/470#issuecomment -568165144 حول أنابيب stdin والعلاقات العامة هنا https://github.com/npm/cmd-shim / سحب / 43 . ولكن مع ذلك ، يبدو أن استخدام .cmd يعمل مع الأنابيب.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات