2017-03-24 7 views
0

このコードはWindowsで問題なく動作します。ノードLinux/Windowsの互換性の問題

var express = require('express') 
    , app = express() 
    , async = require('async') 
    , bodyParser = require('body-parser') 
    , cookies = require('cookies') 
    , cors = require('cors') 
    , fileUpload = require('multer') 
    , fs = require('fs') 
    , moment = require('moment') 
    , morgan = require('morgan') 
    , path = require('path') 
    , session = require('express-session') 
    , upload = fileUpload({ dest: './uploads' }) 
    , uuid = require('uuid') 
    ; 

var connLaw = require('./nodeHelperFunctions/datasources').service 
    , connPG = require('./nodeHelperFunctions/datasources').postgis 
    , headers = require('./helperHtml/headers') 
    , footers = require('./helperHtml/footers') 
    , passCheck = require('./nodeHelperFunctions/hashsalt') 
    ; 

ただし、Amazon Linux AMIボックスで同じコードを実行すると、次のエラーが発生します。

module.js:471 
    throw err; 
    ^

Error: Cannot find module './nodeHelperFunctions/datasources' 
    at Function.Module._resolveFilename (module.js:469:15) 
    at Function.Module._load (module.js:417:25) 
    at Module.require (module.js:497:17) 
    at require (internal/module.js:20:19) 
    at Object.<anonymous> (/home/ec2-user/testbed/js/app.js:17:59) 
    at Module._compile (module.js:570:32) 
    at Object.Module._extensions..js (module.js:579:10) 
    at Module.load (module.js:487:32) 
    at tryModuleLoad (module.js:446:12) 
    at Function.Module._load (module.js:438:3) 

var connLaw = require(path.join(__dirname, 'nodeHelperFunctions/datasources')).service 
    , connPG = require(path.join(__dirname, 'nodeHelperFunctions/datasources')).postgis 
    , headers = require(path.join(__dirname, 'helperHtml/headers')) 
    , footers = require(path.join(__dirname, 'helperHtml/footers')) 
    , passCheck = require(path.join(__dirname, 'nodeHelperFunctions/hashsalt')) 
    ; 

に私のコードを変更しようとした再Windowsで完璧に動作しますが、Linux上で同様のエラーを得た:

module.js:471 
    throw err; 
    ^

Error: Cannot find module '/home/ec2-user/testbed/js/nodeHelperFunctions/datasources' 
    at Function.Module._resolveFilename (module.js:469:15) 
    at Function.Module._load (module.js:417:25) 
    at Module.require (module.js:497:17) 
    at require (internal/module.js:20:19) 
    at Object.<anonymous> (/home/ec2-user/testbed/js/app.js:17:15) 
    at Module._compile (module.js:570:32) 
    at Object.Module._extensions..js (module.js:579:10) 
    at Module.load (module.js:487:32) 
    at tryModuleLoad (module.js:446:12) 
    at Function.Module._load (module.js:438:3) 

どのように私は私が自分自身を書いた人のスクリプトを取得することができますWindows上で正常に動作するときにLinuxで作業しますか?

+0

'/ home/ec2-user/testbed/js/nodeHelperFunctions/datasources'は正しいパスですか? "nodeHelperFunctions" dirはどこですか? – Joe

+0

@akaphenomこれはおそらく正しい答えです。パス名をcammelCaseからダッシュに変更しようとしてください。また、形式をアンダースコアにしてください。 –

+0

@saulはあなたです。ダッシュを使用すると、式の大文字と小文字を区別します。私は(今)すべてのファイルとディレクトリ名にダッシュを使用し、スクリプト内の変数にはcamelCaseを使用します。私はこの数年前に(okの2014年)に焼き付けられ、当時のUbuntu開発環境に切り替えました。 – akaphenom

答えて

2

投稿した内容では分かりにくいですが、linuxのモジュールではファイル名やウィンドウに大文字と小文字が区別される必要があります。ケースをチェックしてみてください。

編集:ファイル名だけでなく、パス全体。

+0

は私のファイル名が実際にdataSources.jsであることがわかりました 私のコードを修正しました。 – shaun