Может "требовать ();"вернуть глобальные функции / переменные? - PullRequest
0 голосов
/ 03 января 2019

Есть ли способ поместить экспортированные функции модулей в глобальное пространство имен, а не в модуль?

Модуль :

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 голосов
/ 03 января 2019

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

Этот языковой ярлык, безусловно, полезен, но я хотел, чтобы вы знали, что он на самом деле делает.

0 голосов
/ 03 января 2019

Да !!, вы можете добавить их к объекту Global .( Это считается плохой практикой, поскольку любой может вносить изменения в наши функции )

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

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

Так что вы можете просто вызывать их напрямую, не назначая никакие локальные переменные:

require("./mod");

sayName("Pedro"); // My name is Pedro
sayAge(28); // My age is 28
0 голосов
/ 03 января 2019

Вы должны быть в состоянии сделать

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

и затем обращаться к ним без префикса.

...