2016-04-21 16 views
11

Theres questa applicazione SailsJS che funziona sulla mia macchina da ufficio ma non localmente, mi chiedo perché? Localmente eseguo Linux. In ufficio Mac. Localmente ottengoSailsJS 0.11: ENOENT: nessun file o directory, stat '.../node_modules/.bin/cdl'

Error: ENOENT: no such file or directory, stat '/home/jiewmeng/Dropbox/meclub/node_modules/.bin/cdl' at Error (native) at Object.fs.statSync (fs.js:849:18) at /home/jiewmeng/Dropbox/meclub/node_modules/include-all/index.js:44:12 at Array.forEach (native) at requireAll (/home/jiewmeng/Dropbox/meclub/node_modules/include-all/index.js:40:9) at /home/jiewmeng/Dropbox/meclub/node_modules/include-all/index.js:50:23 at Array.forEach (native) at requireAll (/home/jiewmeng/Dropbox/meclub/node_modules/include-all/index.js:40:9) at buildDictionary (/home/jiewmeng/Dropbox/meclub/node_modules/sails/node_modules/sails-build-dictionary/index.js:68:14) at Function.module.exports.optional (/home/jiewmeng/Dropbox/meclub/node_modules/sails/node_modules/sails-build-dictionary/index.js:160:9) at Array.async.auto.nodeModulesFolder (/home/jiewmeng/Dropbox/meclub/node_modules/sails/lib/hooks/moduleloader/index.js:379:27) at /home/jiewmeng/Dropbox/meclub/node_modules/sails/node_modules/async/lib/async.js:484:38 at _each (/home/jiewmeng/Dropbox/meclub/node_modules/sails/node_modules/async/lib/async.js:46:13) at Object.async.auto (/home/jiewmeng/Dropbox/meclub/node_modules/sails/node_modules/async/lib/async.js:455:9) at Hook.loadUserHooks (/home/jiewmeng/Dropbox/meclub/node_modules/sails/lib/hooks/moduleloader/index.js:363:13) at Hook.bound [as loadUserHooks] (/home/jiewmeng/Dropbox/meclub/node_modules/sails/node_modules/lodash/dist/lodash.js:729:21) at Hook.initialize (/home/jiewmeng/Dropbox/meclub/node_modules/sails/lib/hooks/userhooks/index.js:29:18) at Hook.bound [as initialize] (/home/jiewmeng/Dropbox/meclub/node_modules/sails/node_modules/lodash/dist/lodash.js:729:21) at /home/jiewmeng/Dropbox/meclub/node_modules/sails/lib/hooks/index.js:75:14 at /home/jiewmeng/Dropbox/meclub/node_modules/sails/node_modules/async/lib/async.js:451:17 at /home/jiewmeng/Dropbox/meclub/node_modules/sails/node_modules/async/lib/async.js:441:17 at _each (/home/jiewmeng/Dropbox/meclub/node_modules/sails/node_modules/async/lib/async.js:46:13) at Immediate.taskComplete (/home/jiewmeng/Dropbox/meclub/node_modules/sails/node_modules/async/lib/async.js:440:13) at processImmediate [as _immediateCallback] (timers.js:374:17)

Sto usando Sails 0.11. Il server può effettivamente iniziare con Sails 0.12 ma ci sono alcune modifiche di rottura, quindi per ora sono bloccato con 0.11. Sto usando Node 4.

+0

Potrebbero esserci alcuni moduli specifici per OS, quindi se c'è un modulo che viene compilato quando si esegue * npm install ... * potrebbe non essere compatibile (quindi non è stato trovato) in altri sistemi operativi – Molda

risposta

7

Penso che si sta utilizzando set sincronizzare computer portatile ufficio con la macchina, a causa della quale alcuni file sono sempre aggiunti nel progetto che non causerà problema in un sistema operativo, ma può creare il problema in altro.

Così, suggerisco che si dovrebbe seguire le pratiche standard per clonare progetto

  1. Usare il git o bitbucket per clonare il progetto.
  2. installare le dipendenze => npm installare

Non utilizzare Dropbox per la sincronizzazione del progetto. Utilizzare il sistema di controllo della versione per clonare/tirare il codice, ed installare tutte le dipendenze

because node-gyp compiles native add-on modules for Node.js with respect to OS

e, si spera, dopo questo dovrebbe funzionare bene.

Se non si desidera utilizzare i VCS allora si può seguire la seguente procedura:

# cd /home/jiewmeng/Dropbox/meclub 
# sudo rm -rf node_modules 
# rm -rf ~/.npm 
# npm cache clear 
# npm install 

Questo è tutto quello che devi fare.

+0

Per me ho provato 'rm -rf node_modules/*' molte volte. Dropbox non sincronizza la cartella 'node_modules'. Ma la chiave per me è che dovevo fare 'rm -rf/node_modules/.npm' in qualche modo non rimosso dal primo comando' rm'. Forse le cartelle nascoste rimangono –

+0

@JiewMeng sì, perché .npm è una cartella e per eliminare una cartella devi usare la forza di rimozione che non funziona con solo rm. –

5

È necessario ricostruire il proprio node_modules se ci si sposta su una nuova macchina. È possibile farlo in questo modo:

cd /home/jiewmeng/Dropbox/meclub 
rm -rf node_modules 
npm install 

Il motivo per cui questo è richiesto è che la cartella .bin è pieno di symlinks. Questo probabilmente causerà problemi con Dropbox. Inoltre, le risorse nella cartella .bin sono talvolta compilate in modo nativo. Passare da Ubuntu a Mac OSX senza ricompilarlo, sarà un problema in fase di runtime per molti componenti.

Proprio come con un VCS, ti consiglio di non sincronizzare la cartella node_modules. Questo non dovrebbe essere condiviso tra le macchine. È possibile gestire queste dipendenze utilizzando NPM su ciascun computer.

2
  1. Assicurarsi che si sta eseguendo vele dalla corretta directory, utilizzando sails lift o qualsiasi altra cosa si utilizza
  2. Fare un npm install per assicurarsi che tutti i moduli sono installati
  3. Verificare manualmente che tutti i moduli in package. jSON sono disponibili nella cartella node_modules
  4. assicurarsi che le versioni del nodo è uguale in entrambi (non dovrebbe essere un problema, anche se non - nella maggior parte dei casi)
  5. provate e reinstallare le vele e il nodo nella caso peggiore.
+0

Fateci sapere se una delle soluzioni ha funzionato –

5

Non è necessario eliminare l'intera directory node_modules. Basta eseguire npm rebuild e ricostruirà i moduli se non corrispondono alla tua attuale architettura.

Problemi correlati