Windows में npm रन-स्क्रिप्ट के लिए शेल कैसे सेट करें


86

मैं Windows पर npm चला रहा हूं और रन-स्क्रिप्ट में समानांतर संचालन का उपयोग करना चाहता हूं और शैली करना चाहता हूं, लेकिन cmd में समानांतर में चलना मेरे पैकेज में गड़बड़ है। json फ़ाइल मैं लिखना चाहता हूं-

scripts: { "go": "cmd1 & cmd2"} 

लेकिन npm cmd.exe के तहत स्क्रिप्ट निष्पादित करता है, जिसके बारे में ; मुझे नहीं पता कि मैं इसे स्क्रिप्ट में बदल सकता हूं: { "go": "bats/bat1.bat")जहां bat1.bat एक cmd बैट फ़ाइल है जो विंडोज़ स्टाइल कॉल का उपयोग करता है या समानांतर में कमांड चलाने के लिए कमांड शुरू करता है। जो काम करता है लेकिन मुझे एक स्क्रिप्ट देता है जो केवल विंडोज पर काम करता है।

अगर मैं बैश क्लोन या साइबरविन के तहत स्क्रिप्ट को चलाने के लिए npm प्राप्त कर सकता हूं तो यह बहुत सरल होगा।

मैंने कोशिश की, config: { "shell": "bash"} लेकिन अभी भी cmd.exe भाग गया

क्या किसी विशेष शेल (cmd.exe नहीं) का उपयोग करके रन-स्क्रिप्ट को npm बताने का कोई तरीका है?


क्या यह अभी भी पैकेज.जेन्सन में शेल निर्दिष्ट करने के लिए संभव नहीं है? मैं दोनों विंडोज़ और बैश स्क्रिप्टिंग के लिए npm का उपयोग करता हूं और किसी विशेष पैकेज के लिए डिफ़ॉल्ट "शेल" या "स्क्रिप्ट-शेल" सेटिंग्स को ओवरराइड करने का कोई तरीका नहीं है। json?
कोरी एलिक्स

जवाबों:


163

एनपीएम 5.1 के बाद से

npm config set script-shell "C:\\Program Files (x86)\\git\\bin\\bash.exe"  

या (64 बिट स्थापना)

npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"

ध्यान दें कि आपको विंडोज़ स्थापित करने के लिए गिट की आवश्यकता है ।

आप इसे चलाकर वापस कर सकते हैं:

npm config delete script-shell

9
यह स्वीकृत उत्तर होना चाहिए! जीआईटी बैश (वीएस कोड शामिल) के साथ विंडोज 10 पर काम करता है।
एलेक्स वांग

7
npm config set script-shell "C:\\Program Files\\Git\\bin\\bash.exe"विंडोज 10 64-बिट पर समानांतर स्क्रिप्ट चलाने वाली मेरी सभी समस्याओं का जवाब है। इसके लिए @DuncanSungWKim ung ung।
ताएक्वॉनजॉ

धन्यवाद, मुझे npm के साथ एक समस्या थी जो कि cmd में काम कर रही थी, लेकिन bash में नहीं और मैंने आपके द्वारा सुझाई गई स्क्रिप्ट को चलाया और यह !!!! एक जवाब के लिए दो दिन
गुगली

2
अगर मैं पहले से ही एक git bash शेल में हूं और npm run <scriptइस कॉन्फिग के साथ रन करता हूं , तो एक नया git bash विंडोज़ स्क्रिप्ट रन कर रहा है। यह वह नहीं है जिसकी मुझे चाहत है। क्या कॉलिंग शेल के भीतर शेल को बस इनवॉइस करने का एक तरीका है?
JHH

2
@ जेएचएच - मेरे पास vscode से खुलने वाले गोले भी थे क्योंकि मैं bash.exe के बजाय git-bash.exe का उपयोग कर रहा था। जब मैंने तय किया तो vscode bash स्क्रिप्ट-शेल बैश के समान था, समस्या हल हो गई थी।
कोरी एलिक्स

28

यहाँ यह करने का एक तरीका है:

  1. एक स्क्रिप्ट बनाएँ, जैसे my_script.sh, आपके प्रोजेक्ट बिन डायरेक्टरी में।
  2. अपनी package.json फ़ाइल में, बैश का उपयोग करके स्क्रिप्ट को चलाने के लिए एक पंक्ति जोड़ें। उदाहरण के लिए:

    "scripts": {
      "boogie": "bash bin/my_script.sh"
    }
    

अब आप अपने bash स्क्रिप्ट को npm से चला सकते हैं:

    npm run-script boogie

बहुत सुरुचिपूर्ण नहीं है, लेकिन यह काम करता है।

यदि आप विंडोज और लिनक्स / यूनिक्स दोनों में विकसित कर रहे हैं, तो कम से कम यह दृष्टिकोण दोनों वातावरणों के लिए काफी पोर्टेबल है।


3
एक अन्य विकल्प: "scripts": { "start": "node ./bin/www", "bash": "bash -c", "ls": "npm run bash ls" }
cchamberlain

17

आदर्श रूप से, npm शेल कॉन्फिग पैरामीटर को ओवरराइड करना चाहिए, लेकिन npm (कम से कम संस्करण 1.4.14) सेटिंग की उपेक्षा करने और इसके बजाय cmd.exe का उपयोग करने के लिए विंडोज में लगता है।

शेल सेटिंग का पता लगाने के लिए अपने बैश या गिट बैश शेल में निम्न कमांड का उपयोग करें:

$ npm config ls -l | grep shell

डिफ़ॉल्ट रूप से, आउटपुट होगा:

shell = "C:\\WINDOWS\\system32\\cmd.exe"

हालाँकि, डिफ़ॉल्ट शेल पैरामीटर को ओवरराइड करने के लिए, आप \ Users \ yourusername \ AppData \ Roaming \ npm \ etc डायरेक्टरी में एक npmrc फ़ाइल जोड़ सकते हैं (या संपादित कर सकते हैं)। बस निम्नलिखित पंक्ति जोड़ें:

shell = "C:\\Program Files (x86)\\git\\bin\\bash.exe"

आपके द्वारा उपयोग किया जाने वाला मार्ग bash.exe के लिए कोई भी मान्य पथ हो सकता है। अब, यदि आप ऊपर "npm config ls -l | grep शेल" कमांड चलाते हैं, तो आप निम्न आउटपुट देखेंगे, जो दर्शाता है कि शेल पैरामीटर ओवरराइड हो गया है:

shell = "C:\\Program Files (x86)\\git\\bin\\bash.exe"
; shell = "C:\\WINDOWS\\system32\\cmd.exe" (overridden)

एक दिन, शायद, एनपीएम का एक नया संस्करण ओवरराइड शेल पैरामीटर पर ध्यान देगा।


1
काश यह काम होता। मैंने COMSPEC पर्यावरण चर को बदल दिया है और यह उसी से खींचता हुआ प्रतीत होता है, लेकिन मुझे इसे सही ढंग से काम करने के लिए नहीं मिला।
cchamberlain

4
यह वही काम करते हैं:$ npm config set shell "C:\\msys64\\usr\\bin\\bash"
kwarnke

आपके सुझाव के बाद मैंने अपनी समस्या हल की। अब, मैं npm पर स्क्रिप्ट चलाने में सक्षम हूं, जिसमें ;फ़ोल्डर में विंडोज पर अलग-अलग कमांड हैं , C: \ Users \ username \ I ने एक .npmrcफ़ाइल शामिल की हैshell = "C:\\Program Files\\Git\\bin\\bash.exe" script-shell = "C:\\Program Files\\Git\\bin\\bash.exe"
iFederx

1

इस उद्देश्य के लिए विशेष रूप से बनाए गए node_module का उपयोग करें। मैं npm-run-all का उपयोग करने का सुझाव देता हूं , लेकिन अन्य मौजूद हैं, जैसे कि समानताएं

आपके प्रश्न के लिए ड्रॉप-इन-रिप्लेसमेंट के लिए समानताएं उदाहरण नीचे है।

"scripts": {
    "parallelexample1": "parallelshell \"echo 1\" \"echo 2\" \"echo 3\""
},

निम्नलिखित आदेश:

npm run parallelexample1

विंडोज़ और यूनिक्स (लिनक्स / मैकओएस) दोनों पर काम करता है।

दिलचस्प रूप से एनपीएम-रन-सभी शेल कमांड का समर्थन नहीं करता है; इसलिए हमें नीचे की तरह स्क्रिप्ट को अलग करने के लिए सभी शेल कमांड डालने की आवश्यकता है।

"scripts": {
   "parallelexample2": "npm-run-all echo*",
    "echo1": "echo 1",
    "echo2": "echo 2",
    "echo3": "echo 3"
},

निम्न आदेश:

npm run parallelexample2

विंडोज़ और यूनिक्स (लिनक्स / मैकओएस) दोनों पर काम करता है।


npm-run-all के लिए टिप के लिए धन्यवाद, मैंने --parallelविकल्प भी आज़माया
ब्रैंडन सोरेन कुली

1

बस चलाने के लिए CMD के तरीके का उपयोग करना .bat!

.json
"scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject",
    "app": "cd build & browser-sync start --server --files 'index.html'",
    "bat": "start start-browser.bat",
    "starts": "start http://localhost:7777/datas/ && start http://localhost:7777/Info/"
},
।बल्ला
start http://localhost:7777/datas/ && start http://localhost:7777/Info/

1

मेरे मामले में मुझे बस npm startबैश के अंदर से भागने की जरूरत थी । मैं दौड़ता हूं cmdतो दौड़कर बैश खोलता हूं "c:\Program Files\Git\bin\bash.exe"। बैश शेल के तहत मैं तब कॉल करने में सक्षम था npm buildऔर npm startसक्सेसफुल था।

यदि आप गिट का उपयोग कर रहे हैं तो आपके पास पहले से ही बैश हो सकता है। यदि नहीं, तो आप इसे स्थापित कर सकते हैं।

उम्मीद है कि इससे किसी का समय बच सकता है।


सभी लिपियों के साथ काम नहीं करता है जो लिनक्स पर काम करते हैं, उदाहरण के लिए जैसेPORT=8000
20

1

आप npm स्क्रिप्ट के लिए क्रॉस-प्लेटफ़ॉर्म के शक्तियां https://github.com/powershell/powershell#get-powershell का भी उपयोग कर सकते हैं ।

एकल प्रोजेक्ट के लिए सेट करने के लिए, प्रोजेक्ट रूट फ़ोल्डर से इसे चलाएँ:

npm config set script-shell pwsh --userconfig ./.npmrc

सभी नोड परियोजनाओं के लिए विश्व स्तर पर सेट करने के लिए:

npm config set script-shell pwsh [--global]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.