Javascript 将 main.js 分成两个文件(导入?需要?)

Tre*_*est 3 javascript node.js

我的超长文件(main.js)按原样工作正常。但我想将处理“y”的函数分成一个单独的文件进行组织。在 PHP 中,我将使用 require('yfunctions.php') 并完成它。

javascript 中是否有不需要重写函数调用的等效项?

main.js:

// do stuff

function first(x){
  // do stuff with x
}

function second(y){
  // do stuff to y
  // return y
}

function third(y){
  // do stuff with y
}
Run Code Online (Sandbox Code Playgroud)

最终变成:

main.js:

require('yfunctions.js');
// do stuff

function first(x){
  // do stuff with x
}
Run Code Online (Sandbox Code Playgroud)

yfunctions.js:

function second(y){
  // do stuff to y
  // return y
}

function third(y){
  // do stuff with y
}
Run Code Online (Sandbox Code Playgroud)

上面的方法不起作用(看起来)。我是否必须向 yfunctions.js 中的每个函数添加“导出”声明?有没有办法说“将此文件中的每个函数导出为函数?”

(注意,我正在使用 Node.js / Electron ...但我很好奇有关 javascript 如何工作的一般知识。)

tho*_*aux 5

用于module.exports导出模块的成员。在你的例子中:

module.exports.second = second;
module.exports.third = third;

function second(y){
  // do stuff to y
  // return y
}
    
function third(y){
  // do stuff with y
}
Run Code Online (Sandbox Code Playgroud)

没有选项可以自动导出模块的所有成员。

如果您使用 ES6,上面的内容可以简化为:

module.exports = {
  second,
  third
};

function second(y){
  // do stuff to y
  // return y
}
    
function third(y){
  // do stuff with y
}
Run Code Online (Sandbox Code Playgroud)

最后,main.js您可以通过为语句指定名称来调用其他模块的导出函数require

const yfunctions = require('./yfunctions');

yfunctions.second(y);
Run Code Online (Sandbox Code Playgroud)

  • @Trees4theForest - 这是正确的。`module.exports` 和较新的(尽管目前基本上不受支持)ES6 `export` 在很大程度上基于所谓的 [_Revealing Module Pattern_](https://addyosmani.com/resources/essentialjsdesignpatterns/book/# Revealingmodulepatternjavascript) ([这里有一个很好的参考](http://stackoverflow.com/questions/5647258/how-to-use-revealing-module-pattern-in-javascript))。在大多数情况下,您会尝试导出尽可能少的函数,并将任何特定于实现的函数隐藏在模块本身中,从而创建一种“公共 API”。 (3认同)
  • 有几个充分的理由不将其保留为一个长文件。如果您使用的是合理的文本编辑器,您可能拥有可以帮助完成此过程的重构工具,如果没有,一个足够简单的正则表达式可以为您获取它们。如果唯一的障碍是收集 50 个函数名称,我会鼓励您模块化您的节点软件。 (3认同)