相対標準の node.js ファイルが必要になると、NodeJS で Dojo Toolkit を使用する際に問題が発生します。
次のディレクトリがあります
node-stuff
start-server.js
source
dojo
app-client
app-common
app-server
lib
http-server.js
routes
index.js
server-config.js
server.js
dojo ツールキットをブートストラップするために、start-server.js ファイルを使用します。
dojoConfig = require('./source/app-server/server-config');
require("./source/dojo/dojo.js");
これにより、dojoConfig 情報を含むサーバー構成ファイルがロードされます。
module.exports = {
baseUrl: 'source/',
async: true,
packages: [
{
name: 'dojo',
location: 'dojo'
},
{
name: 'app-server',
location: 'app-server'
},
{
name: 'app-client',
location: 'app-client'
},
{
name: 'app-common',
location: 'app-common'
}
],
deps: [
"source/app-server/server.js"
]
};
http-server.js ファイル内で、次のノードを使用しようとしています。
define([
"dojo/node!express", //works OK
"dojo/node!path", //works OK
"app-common/roots", //works OK
"dojo/node!../routes/index"] //this last one has the following error message
生成されたエラーメッセージ
"C:\Program Files\nodejs\node.exe" start-server.js
module.js:340
throw err;
^
Error: Cannot find module 'source\app-server\routes\index'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at source/dojo/node.js:41:15
at Object.load (source/dojo/node.js:46:6)
at injectPlugin (C:\Users\james_000\RubymineProjects\node-stuff\source\dojo\dojo.js:1321:13)
at C:\Users\james_000\RubymineProjects\node-stuff\source\dojo\dojo.js:1136:6
at forEach (C:\Users\james_000\RubymineProjects\node-stuff\source\dojo\dojo.js:93:6)
at resolvePluginLoadQ (C:\Users\james_000\RubymineProjects\node-stuff\source\dojo\dojo.js:1129:4)
Dojo Github からノードの最新バージョンを取得しようとしました。それはエラー行をから変更しました
Cannot find module 'source\app-server\routes\index'
に
Cannot find module 'app-server\routes\index'
これはバグですか、それとも何か間違っていますか?
問題は道場/ノードではないかと思います! ./source/app-server/routes/index ではなく、パスを常に source/app-server/routes/index に強制しています。source/app-server/routes フォルダーを node_modules フォルダーに配置すると、正常に動作します。そのフォルダー内にない相対ファイルパスが気に入らないようです。
編集:上記をテストしましたが、正しくありませんでした。