2015-05-20 9 views
8

मेरे पास एक ऐसा एप्लिकेशन है जो एक वेब गेम सर्वर है और उदाहरण के लिए कहता है कि मेरे पास node_modules हैं जो मैं निर्देशिका में उपयोग करता हूं ./ और मेरे पास उनके लिए उचित पैकेज.जेसन है। ऐसा होता है कि निर्देशिका में ./public/ मेरे पास एक वेबसाइट परोसा जा रहा है जो स्वयं नोड_मोड्यूल का उपयोग करता है और इसके लिए एक उचित पैकेज.जेसन भी है।मैं वर्तमान निर्देशिका के लिए npm कैसे स्थापित करूं और पैकेज.जेसन फाइलों के साथ उपनिर्देशिकाएं कैसे स्थापित करूं?

मुझे पता है कि मैं निर्देशिकाओं को नेविगेट करके ऐसा कर सकता हूं। लेकिन क्या इसे स्वचालित करने का कोई आदेश या तरीका है ताकि अन्य डेवलपर्स के लिए अपने सिस्टम में एप्लिकेशन को बूटस्ट्रैप करना आसान हो? खोज करने के लिए पथ -

./apps/*:

+0

आप कुछ इस तरह का मतलब https://www.exratione.com/2015/01/run-npm-install-on -all-subdirectories- युक्त-पैकेज /? – Dhiraj

+0

मैंने देखा और सोचा कि यह डरावना था। मैं जो कुछ भी उपयोग कर रहा हूं वह क्रॉस प्लेटफ़ॉर्म है इसलिए किसी भी प्रकार के ओएस में डेवलपर इस चीज़ को इंस्टॉल कर सकता है जो मैं कर रहा हूं। मुझे बाश के बारे में कुछ नहीं पता, क्या यह ऐसा करने का एकमात्र तरीका है? आपके सहयोग के लिए धन्यवाद। – Elemenofi

उत्तर

13

मान लिया जाये कि आप पर लिनक्स/OSX हैं, तो आप कुछ इस तरह की कोशिश कर सकते:

find ./apps/* -maxdepth 1 -name package.json -execdir npm install \;

तर्क। मैं अन्य node_modules निर्देशिकाओं में पैकेज.जेसन फ़ाइलों को चुनने से बचने के लिए यहां बहुत विशिष्ट होने की सलाह दूंगा (नीचे अधिकतम देखें)।

-maxdepth 1 - केवल 1 की गहराई (यानी वर्तमान निर्देशिका - निदेशिकाओं में मत जाओ) पार खोज पथ में

-name package.json - फ़ाइल नाम में मैच के लिए खोज

-execdir npm इंस्टॉल \; - खोज में प्रत्येक परिणाम के लिए, npm चलाएं फ़ाइल को रखने वाली निर्देशिका में स्थापित करें (इस मामले में पैकेज.जेसन)। ध्यान दें कि अर्धविराम से बचने वाली बैकस्लैश JSON फ़ाइल में स्वयं से बच निकलना है।

अपने जड़ package.json में postinstall हुक में इस रखो और यह हर चलेंगे आप एक NPM स्थापित करूँ:

"scripts": { 
    "postinstall": "find ./apps/* -name package.json -maxdepth 1 -execdir npm install \\;" 
} 
+0

मुझे '\;' – Pratik

+1

पर 'अवैध बचने अनुक्रम' के रूप में त्रुटि मिल रही है @Pratik '' postinstall "का प्रयास करें:" ढूंढें ./apps/* -name package.json -maxdepth 1 -execdir npm इंस्टॉल \\; "' – eddywashere

0

पार मंच समर्थन के लिए (। सहित विंडोज़) आप कर सकते हैं मेरा समाधान आज़माएं शुद्ध Node.js

एक "प्रीइंस्टॉल" NPM स्क्रिप्ट के रूप में यह रन

const path = require('path') 
const fs = require('fs') 
const child_process = require('child_process') 

const root = process.cwd() 
npm_install_recursive(root) 

function npm_install_recursive(folder) 
{ 
    const has_package_json = fs.existsSync(path.join(folder, 'package.json')) 

    if (!has_package_json && path.basename(folder) !== 'code') 
    { 
     return 
    } 

    // Since this script is intended to be run as a "preinstall" command, 
    // skip the root folder, because it will be `npm install`ed in the end. 
    if (has_package_json) 
    { 
     if (folder === root) 
     { 
      console.log('===================================================================') 
      console.log(`Performing "npm install" inside root folder`) 
      console.log('===================================================================') 
     } 
     else 
     { 
      console.log('===================================================================') 
      console.log(`Performing "npm install" inside ${folder === root ? 'root folder' : './' + path.relative(root, folder)}`) 
      console.log('===================================================================') 
     } 

     npm_install(folder) 
    } 

    for (let subfolder of subfolders(folder)) 
    { 
     npm_install_recursive(subfolder) 
    } 
} 

function npm_install(where) 
{ 
    child_process.execSync('npm install', { cwd: where, env: process.env, stdio: 'inherit' }) 
} 

function subfolders(folder) 
{ 
    return fs.readdirSync(folder) 
     .filter(subfolder => fs.statSync(path.join(folder, subfolder)).isDirectory()) 
     .filter(subfolder => subfolder !== 'node_modules' && subfolder[0] !== '.') 
     .map(subfolder => path.join(folder, subfolder)) 
} 
संबंधित मुद्दे