【问题标题】:Requiring Javascript modules from both Node and Browser runtimes从 Node 和 Browser 运行时都需要 Javascript 模块
【发布时间】:2013-01-06 04:45:46
【问题描述】:

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

假设我有三个 .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');
}

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

【问题讨论】:

  • 你能澄清一下“纯”JavaScript 和“节点”的区别吗?
  • 纯 JavaScript 没有 require() 或 module.exports。我们可以使用函数名和命名空间进行函数调用,但节点不允许这样做。我们需要需要我们需要使用的文件,并导出需要在其他js文件中使用的模块/函数。

标签: javascript node.js


【解决方案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

【讨论】:

  • 我的 B.js 和 C.js 是 Javascript 文件而不是节点。 Javascript 不支持 require 和 module.exports。
  • @user1999645 Javascript 本身不支持任何东西。你的意思是 B.js 和 C.js 是浏览器文件吗?你为什么要这么做?
  • 它们是独立于浏览器的文件。我需要通过命令行使用 Node 执行它们。 require() 和 module.exports 是特定于 Nodejs 的,它们在 javascript 中不受支持。我的 B.js 和 C.js 是用 Javascript 作为通用框架代码编写的,我应该可以使用 ExtJs 从 Node 或浏览器调用它
  • @user1999645 你应该更新你的问题。显然不清楚:)
  • 当然谢谢!!!!但是我仍然想知道为什么 Nodejs 要把事情复杂化。为什么不能像在普通 Javascript 文件中那样直接访问模块。为什么我们必须导出模块和变量。
【解决方案2】:

您可以手动加载普通的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    • 1970-01-01
    • 2019-09-29
    • 2019-01-26
    • 1970-01-01
    相关资源
    最近更新 更多