2

我正在使用 Nodejs 编写一些示例程序,这些示例程序也应该可以从浏览器中调用。我在从 Nodejs 中调用 JavaScript 文件时遇到了问题,这种方式也与浏览器 JS 语义兼容(因此require,特定于 Node 的,不会完成这项工作)。

假设我有三个 .js 文件:“A.js”、“B.js”和“C.js”。“A.js”是用 Node.js 编写的。“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');
}

我如何确保解决依赖关系?任何帮助,将不胜感激。谢谢!!!

4

2 回答 2

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

于 2013-01-22T10:03:48.780 回答
1

您可以手动加载普通的 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 时,您将同时获得bandc函数并b可以使用该c函数。

有关更多详细信息,请参阅以下问题:Load "Vanilla" Javascript Libraries into Node.js

于 2013-01-22T10:52:54.507 回答