সমান্তরালে আমি কীভাবে একাধিক এনপিএম স্ক্রিপ্টগুলি চালাতে পারি?


542

আমার package.jsonএই দুটি লিপি আছে:

  "scripts": {
    "start-watch": "nodemon run-babel index.js",
    "wp-server": "webpack-dev-server",
  }

আমি নোড.জেএসএসে বিকাশ শুরু করার সাথে সাথে এই 2 টি স্ক্রিপ্টগুলি সমান্তরালভাবে চালাতে হবে । প্রথম যে জিনিসটি আমি ভেবেছিলাম তা হ'ল এটির মতো তৃতীয় স্ক্রিপ্ট যুক্ত করা:

"dev": "npm run start-watch && npm run wp-server"

... তবে start-watchদৌড়ানোর আগে এটি শেষ হওয়ার অপেক্ষায় থাকবে wp-server

আমি কীভাবে এগুলিকে সমান্তরালভাবে চালাতে পারি? দয়া করে মনে রাখবেন যে আমাকে outputএই কমান্ডগুলি দেখতে হবে । এছাড়াও, যদি আপনার সমাধান একটি build টুল জড়িত থাকে, আমি বরং ব্যবহার করতে চাই gulpপরিবর্তে gruntকারণ আমি ইতিমধ্যেই অন্য প্রকল্পে এটি ব্যবহার।


23
&&আপনার স্ক্রিপ্টগুলি ক্রমান্বয়ে& চালিত করবে যখন সেগুলি সমান্তরালে চালাবে ।
vsync

এটি করার একটি দ্রুত উপায় npm run start-watch & npm run wp-server। এটি ব্যাকগ্রাউন্ড থ্রেড হিসাবে প্রথম কমান্ড চালাবে। এটি সত্যিই ভাল কাজ করে যখন কোনও কমান্ড দীর্ঘায়িত হয় না এবং পরে ম্যানুয়ালি বেরিয়ে আসার প্রয়োজন হয় না। এর মতো কিছু concurrentlyআপনাকে সিটিআরএল-সি দিয়ে একই সাথে সমস্ত থ্রেড মারতে দেয়।
জোশুয়া পিন্টার 18

উত্তর:


616

যুগপত নামক একটি প্যাকেজ ব্যবহার করুন ।

npm i concurrently --save-dev

তারপরে আপনার npm run devকার্যটি সেটআপ করুন :

"dev": "concurrently --kill-others \"npm run start-watch\" \"npm run wp-server\""

11
node ./node_modules/concurrently/src/main.jsপ্রয়োজন হয় না। concurrentকারণ মডিউল করার জন্য একটি বিন ইনস্টল স্ক্রিপ্ট-এ ঠিক সূক্ষ্ম কাজ করবে./node_modules/.bin/concurrent
বালিকা

14
সমান্তরাল এছাড়াও আছে । আমি আসলে সুপারিশ হিসাবে যে এক concurrentlyব্যবহারসমূহ একাধিক প্রবাহের কনসোল আউটপুট সঙ্গে জগাখিচুড়ি (রং অদ্ভুত যেতে পারে, সর্বস্বান্ত কার্সার) যে যেহেতু parallelshellনেই যে সমস্যা
স্টিজন ডি উইট

3
একই সময়ে মধ্যে বাগ @StijndeWitt উল্লেখ এখন সংশোধন করা হয়েছে 2.0.0 রিলিজ । আপনি --rawআউটপুট রঙ সংরক্ষণ করতে মোড ব্যবহার করতে পারেন ।
কিমমো

23
@ স্টিজেডেভিট সমান্তরাল শেলগুলি এনপিএম-রান-অল- গিথুব
কেইথামাসের

11
জাভাস্ক্রিপ্ট বিল্ড / রান স্ক্রিপ্ট পরিচালনা করার জন্য আমাদের আরও ভাল উপায় থাকতে হবে। এই প্ল্যাটফর্মের জন্য সমস্ত কিছু একসাথে সজ্জিত বলে মনে হচ্ছে। পালানো উদ্ধৃতি এবং এনপিএম সহ অন্যান্য উদ্ধৃতিগুলি 'এনপিএম রান' বিল্ডসকে কল করে .. এটি বেশ বেদনাদায়ক হয়ে উঠছে।
অ্যান্ড্রু টি ফিনেল

141

আপনি যদি ইউনিক্সের মতো পরিবেশ ব্যবহার &করেন তবে কেবল বিভাজক হিসাবে ব্যবহার করুন:

"dev": "npm run start-watch & npm run wp-server"

অন্যথায় যদি আপনি ক্রস-প্ল্যাটফর্ম সমাধানটিতে আগ্রহী হন তবে আপনি এনপিএম-চালিত সমস্ত মডিউল ব্যবহার করতে পারেন :

"dev": "npm-run-all --parallel start-watch wp-server"

14
আমি এটি করি - সময়ে সময়ে যখন আমি "ctrl-c" এনপিএম করি, কমান্ডটি পটভূমিতে স্থির থাকে ... কোনও ধারণা?
কামিল টমেক

13
a && bসফলভাবে শেষ bহওয়ার পরে শুরু হয় a, তবে নোডমন ত্রুটি ছাড়াই কখনও থামে না, যাতে এটি কাজ করতে পারে না। a & bশুরু হয় a, এটিকে ব্যাকগ্রাউন্ডে নিয়ে যায় এবং এখনই শুরু bহয়। উইন! a | bপাইপ stdout- এ astdin এর bউভয় একসঙ্গে চলছে প্রয়োজন হয়। যদিও এটির পছন্দসই প্রভাব রয়েছে বলে মনে হচ্ছে, আপনার এটি এখানে ব্যবহার করা উচিত নয়।
j2L4e

8
@ কামিলটমেক &প্রক্রিয়াটি বিচ্ছিন্ন হওয়ায় এটি একটি সত্যই খারাপ ধারণা। এর অর্থ এই যে npmপিতামাতার প্রক্রিয়া আর হবে না। আপনি একটি জম্বি npm run start-watchদিয়ে মারা যাবেন না যা দিয়ে মারা হবে না ctrl-c
ngryman

6
waitঝুলন্ত প্রক্রিয়াগুলির সাথে সমস্যা কমাতে কেবল যুক্ত করুন :"dev": "npm run start-watch & npm run wp-server & wait"
রুস্লান প্রোকপচুক

2
এটি কোনও জম্বি নয়। তবে &ইউনিক্সে কমান্ডটি সিসি / সিজেডকে প্রতিক্রিয়া জানাতে বাধা দেয় এবং ব্যর্থতার ক্ষেত্রে এর রিটার্ন কোডটি প্রচার থেকে বাধা দেয়।
বিনিকি

77

উইন্ডোজ সেমিডি থেকে আপনি ব্যবহার করতে পারেন start:

"dev": "start npm run start-watch && start npm run wp-server"

এভাবে চালু হওয়া প্রতিটি কমান্ড তার নিজস্ব উইন্ডোতে শুরু হয়।


2
নিখুঁত সমাধান! আমি পছন্দ করি যে এটি নতুন উইন্ডোটি চালু করে। ভিএস2015 প্যাকেজ.জসনের প্রয়োজনের জন্য দুর্দান্ত
তেত্রদেব

13
আপনার পর্যবেক্ষক কাজ থাকলে এটি কাজ করে না কারণ &&দ্বিতীয় কমান্ড শুরু করার আগে প্রথম কমান্ডটি শেষ হওয়ার জন্য অপেক্ষা করে এবং কোনও পর্যবেক্ষক টাস্ক কখনই শেষ হয় না।
বেনি নিউজবাউয়ার

2
@ বেনিনিউজবাউয়ার কমান্ডগুলির "স্টার্ট" কমান্ডের আগে রয়েছে যা প্রতিটি কমান্ডের জন্য একটি নতুন কমান্ড লাইন উন্মুক্ত করে। আমি প্রথমেও বিভ্রান্ত হয়ে পড়েছিলাম কারণ আমি ভেবেছিলাম "&& অপারেটর ব্যবহার করা কার্যকর হবে না"। এই সমাধানটি খুব সহজ এবং বিকাশকারীদের কোনও অতিরিক্ত প্যাকেজ / কাজ প্রয়োজন requires
অ্যাডিসন

5
এটা ভুল. কমান্ডটি ধারাবাহিকভাবে চালানো হবে। উইন্ডোজে আপনাকে একই সাথে কমান্ড চালানোর জন্য একটি প্লাগইন ব্যবহার করতে হবে।
zhekaus

1
এই উইন্ডোজ নির্দিষ্ট নয়?
বিনকি

62

আপনার এনপিএম-রান-সমস্ত (বা concurrently, parallelshell) ব্যবহার করা উচিত , কারণ আদেশগুলি শুরু করার ও হত্যা করার উপর এর আরও নিয়ন্ত্রণ রয়েছে। অপারেটররা &, |খারাপ ধারণা, কারণ সমস্ত পরীক্ষা শেষ হওয়ার পরে আপনাকে ম্যানুয়ালি এটিকে থামানো দরকার।

এটি এনপিএমের মাধ্যমে প্রোটেক্টর পরীক্ষার জন্য একটি উদাহরণ:

scripts: {
  "webdriver-start": "./node_modules/protractor/bin/webdriver-manager update && ./node_modules/protractor/bin/webdriver-manager start",
  "protractor": "./node_modules/protractor/bin/protractor ./tests/protractor.conf.js",
  "http-server": "./node_modules/http-server/bin/http-server -a localhost -p 8000",
  "test": "npm-run-all -p -r webdriver-start http-server protractor"
}

-p সমান্তরালভাবে কমান্ড চালান।

-r = যখন কোনও শূন্যের একটি প্রস্থান কোড দিয়ে শেষ হয় তখন সমস্ত কমান্ডকে হত্যা করুন।

রানিং npm run testসেলেনিয়াম ড্রাইভার শুরু করবে, HTTP সার্ভার শুরু করবে (আপনার ফাইলগুলি পরিবেশন করতে) এবং প্রটেক্টর পরীক্ষা চালাবে। সমস্ত পরীক্ষা শেষ হয়ে গেলে এটি http সার্ভার এবং সেলেনিয়াম ড্রাইভারটি বন্ধ করে দেবে।


3
যদিও আমি পরীক্ষাগুলি চালানোর জন্য এটি সঠিকভাবে কাজ করে তা অবাক করি। ওয়েবড্রাইভার-স্টার্ট এবং HTTP- সার্ভার সমান্তরালভাবে চলতে পারে, প্রটেক্টর টাস্কটি কেবল প্রথম দুটি পরে চালানো উচিত।
আসেনভম

অর্ডার নির্ভর কাজের জন্য @asenovm, কেন শুধু ব্যবহার করবেন না gulpএবং gulp-sync?
r3wt 3'17

30

&সমান্তরাল রান স্ক্রিপ্টের জন্য আপনি একটি ব্যবহার করতে পারেন

"dev": "npm run start-watch & npm run wp-server"

রেফারেন্স লিঙ্ক


এটি কি উইন্ডোজেও কাজ করবে? দুঃখিত, আমি নোডে বেশ নতুন এবং আমি কীভাবে এটি যাচাই করতে জানি না!
বেনিসন সাম

@ বেনিসনস্যাম নং, ম্যাক-তে কাজ করে যদিও
শনিহোবান

25

একটি ভাল সমাধান ব্যবহার করা হয় &

"dev": "npm run start-watch & npm run wp-server"

54
না, এটি আরও ভাল নয় কারণ এটি সমস্ত প্ল্যাটফর্মে কাজ করে না।
স্টিজন ডি উইট

আমি যে জানি না। এটি কোন প্ল্যাটফর্মগুলিতে কাজ করে না? @ কোরি - আন্তঃ অপারেতে সতর্কবার্তা দিয়ে আপনার উত্তরটি আপডেট করুন এবং আমি আপনাকে উজ্জীবিত করব
অ্যাশলি কুলম্যান

8
&উইন্ডোজে কাজ করে তবে এটি ভিন্নভাবে কাজ করে। ওএসএক্সে এটি উভয় কমান্ড একই সাথে চালাবে, তবে উইন্ডোজে এটি প্রথম কমান্ডটি চালাবে এবং প্রথম কমান্ডটি উপস্থিত হওয়ার পরে এটি দ্বিতীয় কমান্ডটি চালাবে।
ট্রেভর

3
না এটি প্রক্রিয়াটিকে আলাদা করার মতো নয়, আপনি সাধারণ ফ্যাশনে এটি হত্যা করতে সক্ষম হবেন না।
ngryman

2
@ গ্রেইম্যান এটি আমিও প্রত্যাশা করছিলাম। যাইহোক, আমি এটি চেষ্টা করেছি এবং আপনি যখন Ctrl + C তে আঘাত করেন তখন এটি তিনটি প্রক্রিয়া (ডেভ, স্টার্ট-ওয়াচ এবং ডাব্লুপি-সার্ভার) কে হত্যা করে।
musicin3d

16

আমি উপরে থেকে প্রায় সমস্ত সমাধান পরীক্ষা করে দেখেছি এবং কেবল এনপিএম-চালিত-সমস্ত দিয়েই আমি সমস্ত সমস্যার সমাধান করতে সক্ষম হয়েছি। অন্যান্য সমস্ত সমাধানের প্রধান সুবিধা হ'ল আর্গুমেন্ট সহ স্ক্রিপ্ট চালানোর ক্ষমতা ।

{
  "test:static-server": "cross-env NODE_ENV=test node server/testsServer.js",
  "test:jest": "cross-env NODE_ENV=test jest",
  "test": "run-p test:static-server \"test:jest -- {*}\" --",
  "test:coverage": "npm run test -- --coverage",
  "test:watch": "npm run test -- --watchAll",
}

নোট run-pশর্টকাট জন্যnpm-run-all --parallel

এটি আমাকে যেমন যুক্তি দিয়ে কমান্ড চালাতে দেয় npm run test:watch -- Something

সম্পাদনা করুন:

এর জন্য আরও একটি কার্যকর বিকল্প রয়েছেnpm-run-all :

 -r, --race   - - - - - - - Set the flag to kill all tasks when a task
                            finished with zero. This option is valid only
                            with 'parallel' option.

কোডটি শেষ হয়ে গেলে সমস্ত প্রক্রিয়া মেরে ফেলার -rজন্য আপনার npm-run-allস্ক্রিপ্টে যুক্ত করুন 0। এটি বিশেষত কার্যকর যখন আপনি এইচটিটিপি সার্ভার এবং অন্য একটি স্ক্রিপ্ট ব্যবহার করেন যা সার্ভারটি ব্যবহার করে।

  "test": "run-p -r test:static-server \"test:jest -- {*}\" --",

15

আমার কোনও অতিরিক্ত মডিউল ছাড়াই ক্রসপ্ল্যাটফর্ম সমাধান রয়েছে । আমি একটি চেষ্টা ক্যাচ ব্লকের মতো কিছু সন্ধান করছিলাম যা আমি cmd.exe এবং ব্যাশে উভয়ই ব্যবহার করতে পারি।

সমাধানটি command1 || command2উভয় পরিবেশে একই কাজ করে বলে মনে হচ্ছে। সুতরাং ওপিটির সমাধানটি হ'ল:

"scripts": {
  "start-watch": "nodemon run-babel index.js",
  "wp-server": "webpack-dev-server",
  // first command is for the cmd.exe, second one is for the bash
  "dev": "(start npm run start-watch && start npm run wp-server) || (npm run start-watch & npm run wp-server)",
  "start": "npm run dev"
}

তারপরে সরল npm start(এবং npm run dev) সমস্ত প্ল্যাটফর্মগুলিতে কাজ করবে!


11

আপনি যদি একক অ্যাম্পারস্যান্ডের সাথে ডাবল অ্যাম্পারস্যান্ড প্রতিস্থাপন করেন তবে স্ক্রিপ্টগুলি একই সাথে চলবে।


হুবহু, এটি সহজ এবং মার্জিত, নির্ভরতা বা অন্যান্য যাদু প্রয়োজন।
ম্যাজিকমেকার

1
@ জিনজবুর্গ কারণ সমস্ত প্ল্যাটফর্মের জন্য একই রকম কাজ করে না যেমন আপনি অন্যান্য উত্তরে দেখতে পারেন।
জোর্হে ফুয়েন্তেস গঞ্জালেজ

6

দ্রুত সমাধান

এই ক্ষেত্রে, আমি সেরা বেট বলতে চাই যদি এই স্ক্রিপ্টটি কেবলমাত্র * নিক্স-ভিত্তিক মেশিনে চালানোর উদ্দেশ্যে কোনও ব্যক্তিগত মডিউলের জন্য হয় , আপনি কাঁটাচামচ প্রক্রিয়াগুলির জন্য কন্ট্রোল অপারেটরটি ব্যবহার করতে পারেন, যা দেখতে এটির মতো দেখাচ্ছে:&

আংশিক প্যাকেজ.জসন ফাইলে এটি করার একটি উদাহরণ:

{
  "name": "npm-scripts-forking-example",
  "scripts": {
    "bundle": "watchify -vd -p browserify-hmr index.js -o bundle.js",
    "serve":  "http-server -c 1 -a localhost",
    "serve-bundle": "npm run bundle & npm run serve &"
  }

আপনি তারপর উভয় সমান্তরাল মাধ্যমে এটি কার্যকর করতে চাই npm run serve-bundle। আপনি এই জাতীয় কোনও ফাইলটিতে কাঁটাচামচ প্রক্রিয়াটির পিডিকে আউটপুট করতে স্ক্রিপ্টগুলি বাড়িয়ে তুলতে পারেন:

"serve-bundle": "npm run bundle & echo \"$!\" > build/bundle.pid && npm run serve & echo \"$!\" > build/serve.pid && npm run open-browser",

গুগল বাশ কন্ট্রোল অপারেটরের মতো এমন কিছু যা এটি কীভাবে কাজ করে সে সম্পর্কে আরও জানার জন্য জোর দিয়ে। আমি নীচের নোড প্রকল্পগুলিতে ইউনিক্স কৌশলগুলি লাভের বিষয়ে আরও কিছু প্রসঙ্গ সরবরাহ করেছি:

পরবর্তী প্রসঙ্গ RE: ইউনিক্স সরঞ্জাম ও নোড.জেএস

আপনি যদি উইন্ডোজে না থাকেন তবে ইউনিক্স সরঞ্জাম / কৌশলগুলি নোড স্ক্রিপ্টগুলির সাথে কিছু অর্জনের জন্য প্রায়শই ভাল কাজ করে কারণ:

  1. বেশিরভাগ নোড.জেস ইউনিক্স নীতিগুলি প্রেমের সাথে অনুকরণ করে
  2. আপনি * নিক্সে রয়েছেন (সহ ওএস এক্স) এবং এনপিএম যাইহোক শেল ব্যবহার করছে

Nodeland সিস্টেম কাজের জন্য মডিউল প্রায়ই বিমূর্ত বা ইউনিক্স সরঞ্জামের অনুমান, থেকে এসেছ fsকরতে streams


1
না, &উইন্ডোজে অপারেটর হিসাবে সমর্থিত নয়।
স্টিজন ডি উইট

3
@ স্টিজেডেভিট আমার পোস্টটিতে বলেছেন "যদি আপনি উইন্ডোজ না হন ..."। বিশ্বের বৃহত্তম প্রযুক্তি সংস্থাগুলির একটিতে আমি যে সকল লোকের সাথে কাজ করি তার মধ্যে 0%, উইন্ডোজে নোড চালায়। সুতরাং স্পষ্টতই আমার পোস্ট এখনও অনেক বিকাশকারীদের কাছে মূল্যবান।
james_womack

2
এটি যুক্তি দেওয়ার মতো একটি বৃত্তাকার পদ্ধতি যদিও তাই না? আপনি যদি আপনার এনএমপি স্ক্রিপ্টগুলি এভাবে লিখেন তবে আপনি উইন্ডোজ ব্যবহার করতে পারবেন না কারণ এটি কাজ করবে না। সুতরাং কেউ উইন্ডোজ ব্যবহার করে না, তাই এটি কাজ করে না তাতে কিছু আসে যায় না ... আপনি প্ল্যাটফর্ম নির্ভর নির্ভর সফ্টওয়্যার দিয়ে শেষ করেন। এখন যদি জিনিসটি করা দরকার হয় তবে ক্রস প্ল্যাটফর্মটি করা যদি খুব শক্ত হয় তবে তার চেয়ে ভাল বাণিজ্য হতে পারে। তবে এই সমস্যাটি এখনকার স্ট্যান্ডার্ড এনপিএম স্ক্রিপ্টগুলির যেমন একসাথে এবং সমান্তরাল শেলের সাথে করা খুব সহজ
স্টিজন ডি উইট

2
@ স্টিজেডেভিট আমার যুক্তির কোনওটিই বিজ্ঞপ্তিযুক্ত ছিল না। আমি যুক্তি দিয়ে যুক্তি দিয়েছিলাম। আমরা নোড বিকাশকারীদের কাছে সাধারণ কৌশল পোস্ট করছি, যাদের মধ্যে অনেকে লিনাক্স সার্ভারগুলিতে বিল্ডিং এবং মোতায়েন করে। হ্যাঁ, এটি উইন্ডোজটিতে কাজ করা উচিত যদি এটি ব্যবহারকারীর স্ক্রিপ্ট হয় তবে এনএমপি স্ক্রিপ্টগুলির বেশিরভাগটি বিকাশ এবং মোতায়েনের জন্য হয় - বেশিরভাগ * নিক্স মেশিনে। আপনি উল্লিখিত মডিউলগুলির বিষয়ে ক) একযোগে এবং সমান্তরাল "স্ট্যান্ডার্ড" কল করার জন্য এটি একটি বিস্তৃত প্রসার (একদিনে ~ 1500 ডাউনলোডগুলি এনপিএমল্যান্ডের মান থেকে অনেক দূরে) এবং খ) যদি আপনার একটি সমান্তরাল প্রক্রিয়াটির জন্য অতিরিক্ত সফ্টওয়্যার প্রয়োজন হয় তবে আপনি সম্ভবত ব্যবহার করতে পারেন নি: শ্বাসে।
james_womack

@ স্টিজেডেভিট আমি এই মডিউলগুলি সম্পর্কে সচেতন হওয়ার প্রশংসা করি যদিও — ধন্যবাদ
জেমস_উম্যাক


5

কিভাবে কাঁটা সম্পর্কে

একাধিক নোড স্ক্রিপ্ট চালানোর জন্য আরেকটি বিকল্প হ'ল একক নোড স্ক্রিপ্ট, যা অন্য অনেককে কাঁটাতে পারে। ফোরিং স্থানীয়ভাবে নোডে সমর্থিত, তাই এটি কোনও নির্ভরতা যুক্ত করে না এবং ক্রস প্ল্যাটফর্ম।


নূন্যতম উদাহরণ

এটি কেবল স্ক্রিপ্টগুলি যেমন রয়েছে তেমন চালাবে এবং ধরে নেবে যে তারা পিতামাতার স্ক্রিপ্টের ডিরেক্টরিতে রয়েছে।

// fork-minimal.js - run with: node fork-minimal.js

const childProcess = require('child_process');

let scripts = ['some-script.js', 'some-other-script.js'];
scripts.forEach(script => childProcess.fork(script));

ভার্বোজ উদাহরণ

এটি আর্গুমেন্ট সহ স্ক্রিপ্টগুলি চালিত করবে এবং প্রচুর উপলভ্য বিকল্পগুলি দ্বারা কনফিগার করা হবে।

// fork-verbose.js - run with: node fork-verbose.js

const childProcess = require('child_process');

let scripts = [
    {
        path: 'some-script.js',
        args: ['-some_arg', '/some_other_arg'],
        options: {cwd: './', env: {NODE_ENV: 'development'}}
    },    
    {
        path: 'some-other-script.js',
        args: ['-another_arg', '/yet_other_arg'],
        options: {cwd: '/some/where/else', env: {NODE_ENV: 'development'}}
    }
];

let processes = [];

scripts.forEach(script => {
    let runningScript = childProcess.fork(script.path, script.args, script.options);

   // Optionally attach event listeners to the script
   runningScript.on('close', () => console.log('Time to die...'))

    runningScripts.push(runningScript); // Keep a reference to the script for later use
});

জালযুক্ত স্ক্রিপ্টগুলির সাথে যোগাযোগ করা

ফোর্কিংয়ের একটি অতিরিক্ত উপকারও রয়েছে যা প্যারেন্ট স্ক্রিপ্টটি কাঁটাচানা শিশু প্রক্রিয়াগুলি থেকে ইভেন্টগুলি ফিরে পেতে পাশাপাশি পাঠাতে পারে। একটি সাধারণ উদাহরণ পিতা-মাতার স্ক্রিপ্টের জন্য এটির কাঁটাযুক্ত বাচ্চাদের হত্যা করা।

 runningScripts.forEach(runningScript => runningScript.kill());

আরও উপলভ্য ইভেন্ট এবং পদ্ধতির জন্য ChildProcessডকুমেন্টেশন দেখুন


3

আমি &এবং সঙ্গে সমস্যা মধ্যে দৌড়ে| যা প্রস্থান স্থিতিগুলিকে এবং ত্রুটি নিক্ষেপ যথাক্রমে।

অন্যান্য সমাধান কোনও প্রদত্ত নামের সাথে কোনও কাজ চালাতে চায়, যেমন এনপিএম-রান-অল, যা আমার ব্যবহারের ক্ষেত্রে হয়নি।

সুতরাং আমি এনএমপি-রান-সমান্তরাল তৈরি করেছি যা এনপিএম স্ক্রিপ্টগুলি অবিচ্ছিন্নভাবে চালিত হয় এবং শেষ হয়ে গেলে তাদের প্রতিবেদন করে।

সুতরাং, আপনার স্ক্রিপ্টগুলির জন্য, এটি হ'ল:

npm-run-parallel wp-server start-watch


2

আমার ক্ষেত্রে আমার দুটি প্রকল্প রয়েছে, একটি ছিল ইউআই এবং অন্যটি এপিআই , এবং উভয়ের স্ব স্ব package.jsonফাইলগুলিতে তাদের নিজস্ব ফাইল রয়েছে।

সুতরাং, আমি এখানে কি করেছি।

npm run --prefix react start&  npm run --prefix express start&

আপনার সমাধান মত। এছাড়াও ইউআই ( node app) এবং এপিআই (একটি সাবফোল্ডার এসআরসি তে কৌণিক , অনুমান হয় cd src/ng serve) থাকে, কেবল প্রথম অংশই কাজ করে। উদাহরণস্বরূপ node app& cd src& ng serve
Jeb50

1

আমি কিছু সময়ের জন্য এনপিএম-রান-সব ব্যবহার করছি, তবে আমি কখনই এটির সাথে মিলিত হইনি, কারণ ওয়াচ মোডে কমান্ডের আউটপুট একসাথে ভালভাবে কাজ করে না। উদাহরণস্বরূপ, যদি আমি শুরু করি create-react-appএবং jestঘড়ির মোডে থাকি তবে আমি চালানো শেষ কমান্ডটি কেবলমাত্র আউটপুট দেখতে সক্ষম হব। বেশিরভাগ সময়, আমি আমার সমস্ত কমান্ড ম্যানুয়ালি চালিয়ে যাচ্ছিলাম ...

এ কারণেই আমি নিজের ইচ্ছামত, রান-স্ক্রিন প্রয়োগ করি । এটি এখনও খুব অল্প বয়স্ক প্রকল্প (গতকাল থেকে: পি) তবে এটি লক্ষ্য করা উপযুক্ত হবে, আপনার ক্ষেত্রে এটি হবে:

run-screen "npm run start-watch" "npm run wp-server"

তারপরে 1আউটপুট দেখতে আপনি সংখ্যার কী wp-serverটিপুন 0এবং আউটপুট দেখতে টিপুন start-watch


1

আমার সমাধান পাইটিস-এর সমান, যদিও উইন্ডোজ ব্যবহার করতে আমার কিছু সমস্যা হয়েছিল। সুতরাং আমি win32 এর জন্য যাচাই করতে হয়েছিল।

const { spawn } = require("child_process");

function logData(data) {
    console.info(`stdout: ${data}`);
}

function runProcess(target) {
    let command = "npm";
    if (process.platform === "win32") {
        command = "npm.cmd"; // I shit you not
    }
    const myProcess = spawn(command, ["run", target]); // npm run server

    myProcess.stdout.on("data", logData);
    myProcess.stderr.on("data", logData);
}

(() => {
    runProcess("server"); // package json script
    runProcess("client");
})();


0

খুব বেশি ঝামেলা ছাড়াই আপনাকে যেতে সহজ সরল নোড স্ক্রিপ্ট। আউটপুটগুলি একত্রিত করতে রিডলাইন ব্যবহার করা যাতে লাইনগুলি ম্যাঙ্গাল না হয়।

const { spawn } = require('child_process');
const readline = require('readline');

[
  spawn('npm', ['run', 'start-watch']),
  spawn('npm', ['run', 'wp-server'])
].forEach(child => {
    readline.createInterface({
        input: child.stdout
    }).on('line', console.log);

    readline.createInterface({
        input: child.stderr,
    }).on('line', console.log);
});

0
"dev": "(cd api && start npm run start) & (cd ../client && start npm run start)"

উইন্ডোতে এই কাজ

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.