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') 问题的主要内容,如果未能解决你的问题,请参考以下文章