क्रमिक रूप से NPM स्क्रिप्ट चला रहा है


150

मान लीजिए कि मेरे पास है

"scripts": {
    "pre-build": "echo \"Welcome\" && exit 1",
    "build_logic": "start cmd.exe @cmd /k \"yo esri-appbuilder-js:widget && exit 1\"",
    "post_build":  "start C:\\WebAppBuilderForArcGIS\\startupShortcut",
    "exit" : "start cmd.exe @cmd /k \"echo \"goodbye\" && exit 1\""
  },

इन सभी लिपियों को क्रमिक रूप से लॉन्च करने के लिए मैं एनपीएम कमांड क्या चला सकता हूं। जब मैं प्री / पोस्ट फिक्सिंग का उपयोग करता हूं तो वे क्रमिक रूप से लॉन्च होते हैं लेकिन निष्पादन से पहले वे मूल स्क्रिप्ट के समाप्त होने का इंतजार नहीं करते हैं। मैं मान रहा हूं कि एकमात्र समाधान ऐसा है: जब मैं एसनरिसेरीज़ हेल्पर फ़ंक्शन में शेल कमांड को फायर करता हूं तो मुझे क्रमिक रूप से फायर करने के लिए गुल्प टास्क कैसे मिलते हैं? ? मुझे पता है कि यह गुल्प के साथ किया जा सकता है लेकिन मैं इसकी क्षमताओं का पता लगाने के लिए एनपीएम के साथ रहना चाहूंगा। किसी भी मदद के लिए धन्यवाद!


तल पर अपडेट किया गया उत्तर
त्ज़च ओवदिया

Startकमांड के प्रलेखन के अनुसार , आपको /waitपैरामीटर का उपयोग करने में सक्षम होना चाहिए (आवेदन शुरू करें और इसे समाप्त करने के लिए प्रतीक्षा करें)
त्ज़ाक ओवदिया

जवाबों:


316

इन लिपियों को एनपीएम रन के माध्यम से आमंत्रित करें और उन्हें डबल एम्परसेंड के साथ श्रृंखला दें &&:

npm run pre-build && npm run build_logic && npm run post_build && npm run exit

स्पष्टीकरण:

  • &&अनुक्रमिक निष्पादन के लिए (डबल एम्परसेंड) का उपयोग करें ।
  • &समानांतर निष्पादन के लिए (एकल एम्परसेंड) का उपयोग करें ।

4
यह सबसे अच्छा काम करता है क्योंकि यह क्रम में निष्पादित होता है, क्योंकि प्रत्येक कमांड ओपी में अनुरोध के अनुसार प्रीविओस समाप्त होने तक निष्पादित नहीं करता है। धन्यवाद
चावल

20
&&शेल द्वारा मूल्यांकन किया जाता है और विंडोज पर काम नहीं करता है।
बर्नहार्ड डब्लर

12
यह स्वीकृत उत्तर नहीं होना चाहिए। @ बर्नहार्डडब्लर के अनुसार, &&सिंटैक्स एक यूनिक्स निर्माण है। यह विंडो की मशीनों पर गलत तरीके से व्यवहार करेगा, आपकी निर्माण प्रक्रिया के लिए संभावित रूप से टूटने वाले परिणामों के साथ।
कैफे गोल्डबर्ग

3
@RafeGoldberg The && संचालक का विंडोज़ और * nix दोनों परिवेशों में एक ही निष्पादन व्यवहार है, अर्थात क्रमिक निष्पादन..कुछ ऐसा नहीं है कि हम सभी गायब हैं?
चावल

3
@ राइस ओय वे; गूंगा था और मेरे एकल और डबल-एम्परसेंड ऑपरेटरों को मिला रहा था। प्रति npm-run-allडॉक्स: "हम कभी कभी का उपयोग &समानांतर में कई आदेश को चलाने के लिए, लेकिन विंडोज ' cmd.exe... [इस ऑपरेटर] का समर्थन नहीं करता।" तो यह प्रतीत होता है कि आप सही थे - कम से कम मेरे संक्षिप्त शोध से &&ऑपरेटर पूरी तरह से क्रॉस-प्लेटफॉर्म संगत लगता है।
रिफे गोल्डबर्ग

31

@ Mobiletainment के शानदार जवाब के बाद , आप npm-run-all का उपयोग करके कमांड को बहुत छोटा और बहुत अधिक पठनीय बना सकते हैं। आपके मामले में:

"scripts": {
    ...
    "build": "run-s pre-build build_logic post_build exit"
}

run-sएक शॉर्टकट npm-run-allप्रदान करता है, जो सभी दिए गए npm-लिपियों को क्रमिक रूप से चलाता है, इसलिए -s( run-sएक छोटा संस्करण है npm-run-all -s)।


19

आप उन्हें किसी अन्य स्क्रिप्ट में स्ट्रिंग कर सकते हैं। "start": "pre-build && build_logic && post_build && exit"


2
मुझे उन्हें एक-दूसरे के खत्म होने तक इंतजार करने की आवश्यकता होगी, ये क्रमिक रूप से बंद हो जाएंगे, लेकिन इंतजार नहीं करेंगे।
चावल

2
मुझे नहीं लगता कि यह एक नोड / एनपीएम समस्या है। startतकनीकी रूप से आप विंडोज़ में जो कमांड निष्पादित कर रहे हैं वह समाप्त हो गया है। आंतरिक विधि समाप्त होने तक एप्लिकेशन को खुले रहने के लिए बाध्य करने के लिए /waitध्वज का उपयोग करें । startstart
18

इसे जांचने के लिए - start notepadकमांड प्रॉम्प्ट से चलाएँ, फिर मूल कमांड प्रॉम्प्ट पर एक नज़र डालें। आपको किसी अन्य कमांड में टाइप करने में सक्षम होना चाहिए। फिर चला start /wait notepadstartआदेश "रन" जारी रखना चाहिए, जबकि आपके नोटपैड विंडो खुली है (कमांड प्रॉम्प्ट फिर पर एक नज़र डालें)। फिर एक बार आप नोटपैड को बंद कर startदेंगे , समाप्त हो जाएगा।
DVlsg

डबल एम्पर्सैंड या प्री / पोस्ट फिक्स्ड npm कमांड के जरिए कमांड के लिए \ प्रतीक्षा समाधान काम नहीं करता है।
चावल

15

आप अपनी स्क्रिप्ट को उपसर्ग कर सकते हैं preऔर postइसलिए वे स्वचालित रूप से निष्पादित होंगे:

"scripts": {
  "prebuild": "echo \"Welcome\" && exit 1",
  "build": "start cmd.exe @cmd /k \"yo esri-appbuilder-js:widget && exit 1\"",
  "postbuild":  "start C:\\WebAppBuilderForArcGIS\\startupShortcut",
  "exit" : "start cmd.exe @cmd /k \"echo \"goodbye\" && exit 1\""
}

फिर भागो npm run build


यह काम नहीं करता है, जैसा कि प्रश्न में संकेत दिया गया है: "जब मैं प्री / पोस्ट फिक्सिंग का उपयोग करता हूं तो वे क्रमिक रूप से लॉन्च होते हैं लेकिन वे निष्पादन से पहले मूल स्क्रिप्ट के समाप्त होने का इंतजार नहीं करते हैं।"
रसेल चिशोल्म


2

आप कई अलग-अलग तरीकों से कई कमांड को संयोजित करने के लिए npm-run-all का उपयोग कर सकते हैं

उदाहरण के लिए, यदि आपके पास निम्नलिखित स्क्रिप्ट हैं package.json:

"scripts": {
    "clean": "rimraf dist",
    "lint":  "eslint src",
    "build": "babel src -o lib"
}

आप उन्हें क्रमिक रूप से इस तरह से चला सकते हैं:

$ npm-run-all clean lint build

समानांतर में कई npm कमांड चलाने के लिए यह प्रश्न देखें


1
जाने का यह रास्ता है। npm-run-all सबसे अच्छा है। और एक package.json का उत्पादन करेगा जो क्रॉस-प्लेटफ़ॉर्म है।
रॉबर्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.