从姊妹文件导入函数 Node.JS

Import function from sister file Node.JS

我希望以非抽象的方式解释这一点。我有一个问题,我相信我正在突破 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 文件中需要一个函数。我不需要在两个不同的文件中编写两个完全相同的长函数,而是需要能够从姐妹文件中调用该函数。 这就是为什么这是一个问题。 如果您在父级请求该文件后请求该文件,'Test' 将出现两次,象征性地意味着其他复杂代码也将被加载。 我希望从这个问题得到的结果是我可以以仅从中导入函数的方式要求文件。 再次感谢。

The problem with this setup is that when you require 1.js, it reloads the entire file, including any code that isn't an export.

当你require 文件将被加载一次然后被缓存

How could I only import the exports of a file without loading the unrelated code?

因为 Node 将使用缓存版本,所以一旦需要该文件,您就永远不必重新加载该文件。

require 函数通常有 5 个步骤:

  1. 解析:找到文件的路径
  2. 加载:判断文件内容的类型
  3. 包装:为文件提供其私有范围。这就是使 require 和 module 对象成为我们需要的每个文件的本地对象的原因。
  4. 评估:这是 VM 最终对加载的代码执行的操作。
  5. 缓存:这样当我们再次需要这个文件时,我们就不会再次重复所有步骤。