从姊妹文件Node.JS导入功能

时间:2018-08-19 12:51:46

标签: javascript node.js import require

我希望以一种非抽象的方式来解释这一点。我有一个问题,我相信我正在突破Node的界限,因为关于这个特定主题的文档似乎很少。

首先,这是我的文件布局。

//main.js
var 1 = require('1.js');
var 2 = require('2.js');

第一个文件的目的是将两个子文件加载到进程中。

//1.js
console.log('Test');
module.exports = function msgUSR(text){
  console.log(text);
}

此文件的目的是创建一个导出,很显然,此导出可以导入到Main.js中,但是,我需要将一个功能从1.js导入到2.js中,而无需重新加载将整个文件存入内存。

例如。

//2.js
var msgUSR = require('1.js');
msgUSR('blah');

此设置的问题在于,当您需要1.js时,它将重新加载整个文件,包括不是导出代码的所有代码。

我如何只导入文件的导出而不加载不相关的代码。

谢谢!我知道有人对此有解决方案。

编辑: 我知道这里的代码不会复制任何有用的数据。我的观点是,我该如何在父文件已要求的另一个JS文件中要求一个功能。而不是在两个不同的文件中编写完全相同的两个冗长的函数,我需要能够从一个姐妹文件中调用该函数。 这就是为什么这是一个问题。 如果您要在父项需要文件之后再请求该文件,则“测试”将出现两次,这意味着也将加载其他复杂代码。 这个问题给我带来希望的结果是,我可以要求以仅从其中导入函数的方式来请求文件。 再次感谢。

1 个答案:

答案 0 :(得分:0)

  

此设置的问题在于,当您需要1.js时,它将重新加载   整个文件,包括不是导出的任何代码。

require时,文件将被加载一次,然后被缓存

  

如何仅导入文件导出而不加载文件   不相关的代码?

因为Node将使用缓存的版本,所以您不再需要重新加载文件。

require函数通常有5个步骤:

  1. 解决:查找文件的路径
  2. 正在加载:确定文件内容的类型
  3. 包装:为文件提供专用范围。这就是使require和module对象都位于我们需要的每个文件本地的原因。
  4. 评估:这是VM最终对加载的代码执行的操作。
  5. 缓存:这样,当我们再次需要此文件时,就无需再次执行所有步骤。