2016-06-29 14 views
4

ich eine Verzeichnisstruktur wie diese: /a/b/cnpm installieren aus dem übergeordneten Verzeichnis

Verzeichnis cpackage.json enthält und node_modules enthalten soll.
Wie kann ich npm install aus dem Verzeichnis a ausführen?

Ich habe diesen Weg versucht: npm --prefix b/c install b/c aber auf diese Weise werden alle Symlinks direkt innerhalb c anstelle der Standard node_modules/.bin erstellt.

Gibt es eine Möglichkeit, das zu erreichen?

Knoten: 6.2.2
npm: 3.10.2

+0

Ich denke nicht. Die aktuellen Arbeitsverzeichniskonzepte erlauben dies nicht. Wahrscheinlich benötigt node.js Funktion stoppt dies. –

+0

Ich dachte auch darüber nach, ob es irgendwelche Problemumgehungen gibt, wenn es nicht möglich ist, den Pfad von package.json zu übergeben. Vielleicht eine zusätzliche package.json-Datei in/a mit benutzerdefiniertem "npm run", um einen Prozess zu starten, das Verzeichnis in/a/b/c zu ändern und "npm install" auszuführen? – Zygimantas

Antwort

6

eine npm Mit Pre installieren Haken in einem package.json in Ihrem a Verzeichnis ist wahrscheinlich die beste Wahl in dieser Situation.

scripts: { 
    preinstall: `cd b/c && npm install` 
} 

Auf diese Weise npm install im Verzeichnis läuft a wird auch das c Verzeichnis tun, um eine nahtlose Erfahrung dev zu installieren und bereitzustellen.

1

Ein Overkill wenig, aber kann nützlich sein ...

Mit Hilfe von Rekursion Sie node_modules finden.

Sie könnten diese Datei in einem übergeordneten Verzeichnis ausführen, um node_modules im untergeordneten Verzeichnis zu finden und NPM-Argumente übergeben.

Hinweis: getestet auf Windows

var child_process = require('child_process'); 
 
var fs = require('fs'); 
 
var path = require('path'); 
 
var safe = 0; 
 

 
let args = process.argv.splice(2).toString().replace(/,/g ,' '); 
 
function recurse(_path){ 
 
safe ++; 
 
if(safe > 5000){ 
 
    console.log('directory may be too large') 
 
    return 
 
} 
 

 
    if(/node_modules$/.test(_path)){ 
 
    let cwd = path.resolve(__dirname ,_path) 
 
    console.log('found node_modules at '+cwd) 
 
    child_process.exec(`start cmd.exe /k npm ${args}`,{cwd}) 
 

 
    return 
 
    } 
 
    let directoryList = fs.readdirSync(_path); 
 
    directoryList.forEach(function(nextDir){ 
 
    if(fs.statSync(_path+'/'+nextDir).isFile()){ 
 
     return 
 

 
    } 
 
    if(/^\./.test(nextDir)){ //.folder beginging with . 
 
     return 
 
    } 
 
    recurse(_path+'/'+nextDir); 
 

 
    }) 
 
} 
 
recurse('./')

+0

Dieses Skript kann definitiv nützlich sein, um andere npm-Aufrufe in verschachtelten Verzeichnissen auszuführen, aber diese Vorgehensweise erfordert weiterhin die initiale 'npm-Installation' im' c' -Verzeichnis, da das 'node_modules'-Verzeichnis anfänglich nicht existiert. –