【发布时间】:2014-05-16 01:39:02
【问题描述】:
我正在尝试使用Browserify 在socket.io Web 客户端中启用node.js 之类的模块。我在所需模块中需要模块时遇到问题。
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,两者都会导致上述错误,只是路径不同。
我已经用--alow-file-access-from-files 打开了 Chrome,所以我知道这不应该是问题的一部分。
在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;
【问题讨论】:
标签: javascript node.js browserify