NodeJs require('./file.js') 问题

Posted

技术标签:

【中文标题】NodeJs require(\'./file.js\') 问题【英文标题】:NodeJs require('./file.js') issuesNodeJs require('./file.js') 问题 【发布时间】:2012-07-28 10:01:25 【问题描述】:

我遇到了一些问题,包括要在我的 NodeJs 项目中执行的文件。

我在同一个目录中有两个文件:

a.js

var test = "Hello World";

b.js

require('./a.js');
console.log(test);

我用node b.js 执行b.js 并得到错误ReferenceError: test is not defined

我浏览了文档http://nodejs.org/api/modules.html#modules_file_modules

我错过了什么?提前致谢。

【问题讨论】:

仅供参考,在 a.js 上声明“var”或“let”并不意味着它可以全局访问(使用 require),而只能在文件 a.js 中访问 【参考方案1】:

更改 a.js 以导出变量:

exports.test = "Hello World";

并将require('./a.js')的返回值赋给一个变量:

var a = require('./a.js');
console.log(a.test);

另一种您经常看到并且可能使用的模式是在 a.js 中将某些东西(对象、函数)分配给 module.exports 对象,如下所示:

module.exports =  big: "string" ;

【讨论】:

我们还能在html中使用这个js文件(a.js)吗? 为了能够在 html 中使用它,您应该 1) 将其编码为在 html 中工作; 2) 导出所需的函数、变量,使其在节点中也能工作。【参考方案2】:

您误解了应该发生的事情。模块中定义的变量不共享。 NodeJS 对它们进行作用域。

您必须使用module.exports 将其退回。

a.js

module.exports = "Hello World";

b.js

var test = require('./a.js');
console.log(test);

【讨论】:

【参考方案3】:

如果你想将变量导出到另一个文件中。有两种模式。 一个是 a.jsglobal.test = "Hello World"; //这里test是全局变量,但是会被污染

另一个是 一个.js module.exports.test = "Hello World"; 或exports.test= "Hello World"; b.js var test = require('./a.js'); //b.js中的测试可以得到a.js中的测试 console.log(test);

【讨论】:

以上是关于NodeJs require('./file.js') 问题的主要内容,如果未能解决你的问题,请参考以下文章

为啥 nodejs 可能找不到“require”?

命名空间“NodeJS”没有导出成员“Require”

nodejs 有require方法吗

NodejS---require的机制

nodejs require路径使用变量报错为啥

NodeJs模块加载流程分析(require)