2017-05-01 6 views
0

私のnode.jsアプリケーションを開発(localhost osx 10.12.4)から本番(usbuntu 16.04とAmazon Linux AMI 2017.03.0の両方)に移動するのに奇妙な問題がありました。私は信じてCentOSです)。私はlocalhost osxではなく、プロダクション/ Linuxサーバでのみ問題を出している特定のファイルを持っています。Node.jsはオペレーティングシステム間でモジュールの動作が異なる必要があります

controller.counties.js、次のようマネージャモジュールをインポート:

私は2つのディレクトリにそれを呼び出して、ファイルの上にあるモジュールが持っている const Manager = require('../../common/objects/Manager);

:としてES5にコンパイルさ import Manager from '../../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; 

私は、Linux OSの中cannot find module ../../common/objects/Managerを得続けるが、それはLOで正常に動作しますcalhost OSX。

私はOSXとLinuxの間にこれらの不一致がある理由を知りませんか?私が理解しているところでは、LinuxとOSXはNode.jsとほとんど同じだと思われますが、Linuxは上位ディレクトリからのモジュールのインポート/要求を防止していますか?

+0

プロダクションの依存関係をアップデートしていますか?これは、npmモジュールをダウンロードしていない可能性があります。右? –

+0

これはローカルで定義されたモジュールを必要としています。もしnpmモジュールをインポートしていたら、 'manager 'からのインポートマネージャと言うでしょう;'ノードの唯一の違いは、ローカルでは6.9.5、プロダクトでは6.10。*ですが、そのような壊れた変更ではないと思いました – gradorade

+1

あなたのパスに大文字を使用しているので、Linuxが大文字と小文字を区別し、OSXがそうでない異なるOSでパスの大文字と小文字の区別が異なる場合があります。 Linux上のパスに正確に正しいケースがあることを100%確信していますか? – jfriend00

答えて

0

jfriend00私の質問にちょうど答えました - コメントを参照してください

関連する問題