私の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);
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は上位ディレクトリからのモジュールのインポート/要求を防止していますか?
プロダクションの依存関係をアップデートしていますか?これは、npmモジュールをダウンロードしていない可能性があります。右? –
これはローカルで定義されたモジュールを必要としています。もしnpmモジュールをインポートしていたら、 'manager 'からのインポートマネージャと言うでしょう;'ノードの唯一の違いは、ローカルでは6.9.5、プロダクトでは6.10。*ですが、そのような壊れた変更ではないと思いました – gradorade
あなたのパスに大文字を使用しているので、Linuxが大文字と小文字を区別し、OSXがそうでない異なるOSでパスの大文字と小文字の区別が異なる場合があります。 Linux上のパスに正確に正しいケースがあることを100%確信していますか? – jfriend00