2017-05-01 3 views
0

Ich hatte ein seltsames Problem, meine node.js App von der Entwicklung (localhost osx 10.12.4) zur Produktion (Sowohl Ubuntu 16.04 und Amazon Linux AMI 2017.03.0, die ist CentOS basiert glaube ich). Ich habe eine bestimmte Datei, die mir Probleme nur auf den Produktions-/Linux-Servern gibt, nicht auf localhost osx.Node.js erfordern Modul Verhalten unterscheidet sich zwischen den Betriebssystemen

Ich habe ein Modul, das zwei Verzeichnisse über die Datei ist, die es nennt:

controller.counties.js den Manager-Modul wie folgt importiert: import Manager from '../../common/objects/Manager'; , der ES5 kompiliert wird, wie: const Manager = require('../../common/objects/Manager);

Manager.js:

const Manager = { 
    req: {}, 
    res: {}, 
    data: [], 
    init: function(req,res) { 
    const mng = this; 
    mng.req = req; 
    mng.res = res; 
    mng.data = req.body; 
    return Promise.resolve(mng); 
    }, 
    handle: function(fn, ...params) { 
    return async (manager) => { 
     const args = getArgs(params, manager); 
     const data = await fn(args); 
     const mng = this; 

     mng.req = manager.req; 
     mng.res = manager.res; 
     mng.data = data; 
     return Promise.resolve(mng); 
    }; 
    }, 
    pass: function(fn, ...params) { 
    return async (manager) => { 
     const args = getArgs(params, manager); 
     await fn(args); 

     const mng = new Manager(); 
     mng.req = manager.req; 
     mng.res = manager.res; 
     mng.data = manager.data; 
     return Promise.resolve(mng); 
    }; 
    } 
}; 

function getArgs(params, manager) { 
    const args = []; 
    params.forEach(function(param) { 
    if (param.indexOf('.') > -1) { 
     const split = param.split('.'); 
     const value = getDeepValue(manager, split); 
     return args.push(value); 
    } else { 
     const val = manager[param]; 
     args.push(val); 
    } 
    }, this); 
return args; 
} 

export function getDeepValue(object, array) { 
const prop = array[0]; 
const val = object[prop]; 
if (array.length === 1) { 
    return val; 
} 
const newArray = array; 
newArray.splice(0, 1); 
return getDeepValue(val, newArray); 
} 

module.exports = Manager; 

ich halte cannot find module ../../common/objects/Manager in den Linux OS bekommen, aber es funktioniert gut auf lo Calhost OSX.

Hat jemand irgendeine Ahnung, warum ich diese Inkonsistenzen zwischen OSX und Linux haben könnte? Soweit ich weiß, sollen Linux und OSX für Node.js fast identisch sein, aber verhindert Linux, dass Module aus einem höheren Verzeichnis importiert/benötigt werden?

+0

Aktualisieren Sie Ihre Abhängigkeiten von der Produktion? Dies könnte daran liegen, dass Sie das npm-Modul nicht heruntergeladen haben. Recht? –

+0

Nun, das erfordert ein lokal definiertes Modul. Wenn ich ein npm-Modul importiere, würde ich 'import Manager von 'manager' sagen;' Die einzigen Unterschiede im Knoten sind 6.9.5 auf local und 6.10. * On prod, aber ich dachte nicht, dass das so eine brechende Änderung sein könnte – gradorade

+1

Da Sie in Ihrem Pfad Großbuchstaben verwenden, können Sie bei den verschiedenen Betriebssystemen, bei denen Linux die Groß-/Kleinschreibung unterscheidet und OS X nicht, Unterschiede bei der Groß-/Kleinschreibung beachten. Sind Sie 100% sicher, dass Sie genau den richtigen Fall im Pfad unter Linux haben? – jfriend00

Antwort

0

jfriend00 Nur meine Frage beantwortet - siehe die Kommentare

Verwandte Themen