这是我的示例:
var name="Doe";
var template = require('./template.txt');
和template.txt包含:
`hello ${name}`
我得到了错误:名称未定义。
有什么主意吗?
答案 0 :(得分:2)
好吧,您实际上想从.txt
文件中获取JS代码并运行它,因此您需要臭名昭著的eval
var name="Doe";
var template = require('fs').readFileSync('./template.txt');
template = template.toString().trim();
console.log(eval(template)) // will output: hello Doe
虽然像这样运行JS代码可能会很危险,但是如果模板是您控制下的文件并由您编写,那么我想可以做到。
答案 1 :(得分:1)
模块包装器
在执行模块代码之前,Node.js将 用如下所示的函数包装器包装它:
(function(exports, require, module, __filename, __dirname) { // Modulecode actually lives in here });
这样做,Node.js实现了一些目标 事情:
- 它将顶级变量(用var,const或let定义)限定范围 而不是全局对象。
它有助于提供一些 实际上是特定于模块的全局变量, 例如:
- 实现者可以用来导出的模块和导出对象 模块中的值。
- 便捷变量__filename和 __dirname,包含模块的绝对文件名和目录路径。
和globals:
在浏览器中,顶级范围是全局范围。这意味着 在浏览器
var something
中将定义一个新的全局变量。在 Node.js与此不同。顶级范围不是全局范围 范围; Node.js模块中的var something
将是本地的 模块。
因此,当我们在一个模块中定义变量时,程序中的其他模块将无权访问该变量,但是您可以在不使用var
的情况下声明变量,并将其定义为全局变量。
此线程中的更多信息:Where are vars stored in Nodejs?