可以“ require();”返回全局函数/变量?

时间:2019-01-03 00:53:18

标签: node.js require

是否有一种方法可以将模块的导出功能放在全局名称空间中,而不是在特定于模块的名称空间中?

模块

function sayName(name) {
    console.log("My name is " + name);
}
function sayAge(age) {
    console.log("My age is " + age);
}
module.exports = {sayName: sayName, sayAge: sayAge};

主文件

const mod = require("./mod");
mod.sayName("Pedro"); // My name is Pedro
mod.sayAge(28); // My age is 28

这工作正常,但我想避免引用模块:

const mod = require("./mod");
sayName("Pedro"); // My name is Pedro
sayAge(28); // My age is 28

可以做到吗?

3 个答案:

答案 0 :(得分:2)

require()不会像您所要求的那样自动将内容添加到全局名称空间。它只是不这样做,也不是它如何工作的。它返回一个值,该值可以是单个值,也可以是包含多个值的对象或数组。您必须将返回值或返回值上的某些属性分配给某些对象,以便保存以供以后使用。

您可以使用ES6语法在本地范围内自动为require()返回的对象上的特定属性创建变量,如下所示:

const {sayName, sayAge} = require('./mod');

sayName("Pedro"); // My name is Pedro
sayAge(28); // My age is 28

请记住,这些也不是全局变量。它们是模块级变量。这实际上只是一个语言快捷方式:

const temp = require('./mod');
const sayName = temp.sayName;
const sayAge = temp.sayAge;

sayName("Pedro"); // My name is Pedro
sayAge(28); // My age is 28

该语言快捷方式肯定有用,但是我希望您知道它的实际作用。

答案 1 :(得分:1)

您应该能够做到

const {sayName, sayAge} = require('./mod');

,然后引用它们而没有前缀。

答案 2 :(得分:0)

是的!,您可以将它们添加到 Global 对象。 (这是一种不好的做法,因为任何人都可以更改我们的功能

@echo off
cls
title Counter

:Incremental_Value
cls
echo./----------------------------------------------\
echo.I  Set the Incremental Value then press Enter  I
echo.\----------------------------------------------/
echo.
set /p %incremental_value%= [

:Starter_Value
cls
set current_value=%starter_value%
echo./------------------------------------------\
echo.I  Set the Starter Value then press Enter  I
echo.\------------------------------------------/
echo.
set /p %starter_value%= [
goto Counter

:Counter
cls
echo./-------------------\
echo.I        %current_value%        I
echo.\-------------------/
echo.
pause >nul
set /a current_value=current_value+incremental_value
goto Counter

因此您可以直接调用它们而无需分配任何局部变量:

function sayName(name) {
    console.log("My name is " + name);
}
function sayAge(age) {
    console.log("My age is " + age);
}

global.sayName = sayName;
global.sayAge = sayAge;