我正在使用Nodejs编写一些示例程序,这些程序也应该可以从浏览器中调用。我面临着从Nodejs中调用JavaScript文件的问题,其方式也与浏览器JS语义兼容(因此require
是特定于节点的,不会完成工作)。
假设我有三个.js文件:“A.js”,“B.js”和“C.js”。 “A.js”是在Node中编写的。 “B.js”和“C.js”是用纯JavaScript编写的(也就是说,它们应该可以从浏览器中调用)。
我需要调用“A.js”中“B.js”中的函数b()。所以我eval()“B.js”导出方法b()。这工作正常。当我在“B.js”中的函数b()调用“C.js”中的函数c()时会出现问题。
B.js:
function b()
{
console.log('In function b');
c();
}
C.js:
function c()
{
console.log('In function c');
}
如何确保依赖性得到解决?任何帮助,将不胜感激。感谢!!!
答案 0 :(得分:1)
在node.js中,有require
函数,允许您需要一个文件并使用导出的内容。
C.js:
function c() {
console.log('In function c');
}
// This is the exported object
module.exports = {
c: c
};
B.js:
function b() {
var c = require('./c.js');
// "c" is now the exported object
console.log('In function b');
c.c();
}
module.exports = {
b: b
};
A.js:
var b = require('./b.js');
b.b(); // "In function b" "In function c"
您一定应该阅读如何处理node.js中的模块:http://nodejs.org/api/modules.html
答案 1 :(得分:1)
您可以手动加载普通的vanilla javascript文件并eval
加载它。在您的情况下,您可以创建一个加载纯javascript文件的节点模块。像这样:
<强> bc.js 强>:
var fs = require('fs');
// load and eval b.js and c.js
eval(fs.readFileSync('./b.js','utf8') + fs.readFileSync('./c.js','utf8'));
// put function b and c in exports
module.exports = {
b : b,
c : c
};
因此,无论何时需要bc.js,您都会获得b
和c
函数,b
可以使用c
函数。
有关详细信息,请参阅以下问题:Load "Vanilla" Javascript Libraries into Node.js