我有一个非常基本的功能,看起来像这样,它位于一个名为functions.js
function echo(input){
process.stdout.write(echo);
}
当我添加文件并像这样调用echo()
时:
主档案:
require("functions.js");
require("another_file.js");
another_file.js
echo("hello!");
它给了我以下错误:
ReferenceError: echo is not defined
有没有办法让我在没有使用exports
的情况下创建一个像这样的全局函数?
答案 0 :(得分:6)
在functions.js
内,您可以访问节点的global
变量,就像浏览器中的window
变量一样。正如柏拉图在评论中所建议的那样,您只需执行echo = function echo(input){ ... }
即可将其添加到全局。但是,如果您使用的是严格模式,则会抛出错误,该模式旨在捕获常见错误(例如意外创建全局变量)。
将echo
安全地添加为全局的一种方法是将其添加到全局global
变量中。
"use strict";
global.echo = function echo(input) {
process.stdout.write(input);
}
我认为通常使用exports
是更好的做法,因为否则一旦functions.js
被包含(来自任何其他文件),您就可以在每个文件中访问echo
,它可以是很难追查它来自哪里。
为此,您需要让functions.js
看起来更像:
"use strict";
module.exports.echo = function echo(input) {
process.stdout.write(input);
}
然后在您的主脚本中执行以下操作:
"use strict";
var functions = require("./functions.js");
functions.echo("Hello, World");
答案 1 :(得分:0)
当你想要require
特定文件时,你需要提供它的绝对路径
require('.\functions.js');