node.js:如何在外部需求中使用文字?

时间:2019-04-02 10:52:41

标签: node.js

这是我的示例:

var name="Doe";
var template = require('./template.txt');

和template.txt包含:

`hello ${name}`

我得到了错误:名称未定义。

有什么主意吗?

2 个答案:

答案 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代码可能会很危险,但是如果模板是您控制下的文件并由您编写,那么我想可以做到。

当然,您可以简单地使用EJSnunjucks之类的模板引擎

答案 1 :(得分:1)

来自Node.js documentation

  

模块包装器
  在执行模块代码之前,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?