我試圖與Browserify
,以啓用node.js
類似socket.io
Web客戶端模塊。我遇到需要模塊內部需要模塊的問題。Browserify模塊內需要的模塊
main.js
需要client.js
,這需要admin.js
client.js
要求路徑是相對於在文件系統main.js
位置。
admin.js
要求路徑是相對於文件系統中的client.js
位置。
browserify main.js -o client.packaged.js
產生嵌入式文件client.js
。在client.js
中觸發事件時需要admin.js
。當這個事件觸發時,我得到以下錯誤:
Uncaught Error: Cannot find module '../../../modules/admin/admin.js'
我試圖改變路徑是相對於browserified包和相對client.js
,都導致上述錯誤,只是不同的路徑。
我把Chrome打開爲--alow-file-access-from-files
,所以我知道這不應該成爲問題的一部分。
在由browserify
生成的源圖中,admin.js
不在任何地方,所以它不能因爲某些原因找到它。
在使用browserify
時,如何在模塊內正確使用相對路徑來要求其他模塊?
在此先感謝您的幫助!
編輯 - 添加下面的源以幫助澄清
main.js
//Include the client
var client = require('../../base/client/client.js').client;
//Start when document is ready
$(function() {
console.log(client);
client.start();
});
client.js
var client = new Object();
client.start = function() {
//Server specific information
var IP = 'localhost';
var PORT = '1337';
//Flags
//SSL - true for secured connections
//DEBUG - true to enable console.log() messages
var SSL = false;
var DEBUG = true;
//Locations of modules to include
var MODULE_LOCATIONS = [
'../../modules/admin/admin.js'
];
//Builds an array of modules to start
var MODULES = [];
for (var i = 0; i < MODULE_LOCATIONS.length; i++) {
MODULES.push(require(MODULE_LOCATIONS[i]));
}
var socket = io.connect(getConnectionString());
socket.on('connection', function(socket) {
client.onConnection(socket);
//Load modules
for (var i = 0; i < MODULES.length; i++) {
MODULES[i].start(socket, io);
}
});
//Returns a connection string to the socket.io server
function getConnectionString() {
if (SSL) {
return 'https://' + IP + ':' + PORT;
} else {
return 'http://' + IP + ':' + PORT;
}
}
};
module.exports.client = client;
admin.js
//Events
var SYSTEM_STATS = 'system_stats';
var start = function(socket, io) {
socket.on(SYSTEM_STATS, function(data) {
admin.onSystemStats(socket, data);
});
}
module.exports.start = start;
點是相對路徑是相對於它們都包含在文件中。你的句子使得它聽起來像你對我認爲含有「main.js」的目錄變成某種基本路徑,然後其他文件可能需要的東西相對對此。像往常一樣,對於這樣的問題,代碼比英語更清晰。除文件內容外,顯示目錄和文件的佈局也將幫助人們解決您的問題。 –
我想我對這種方法有點太聰明瞭。我覺得有一些錯誤的交流,所以我甩掉了源頭來幫忙。感謝您的幫助! – nathansizemore