2015-04-09 4 views
2

У меня есть очень простой функции, которая выглядит так, он находится в файле с именем functions.jsNodejs Глобальные функции

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 

Есть ли способ для меня, чтобы сделать функцию, которая является глобальным, как, что без havingin использовать exports?

+1

попробовать 'эхо = функция эхо (вход) { ...} ' – Plato

+1

@Plato: лучше быть явным, выполняя' global.echo = ... '. Присвоение неинициализированных переменных является ошибкой (в строгом режиме) – Bergi

ответ

4

Внутри 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"); 
+0

Вам не нужно, чтобы IEFE, узел уже имел глобальную переменную 'global'. Это может даже не работать вообще, потому что 'this' в области модуля не является глобальным объектом iirc. – Bergi

+0

Использование 'global.echo' решает проблему благодаря! –

+1

Упс! Вы правы - '' это '' не 'global', ни' module'. Редактирование моего ответа сейчас – redbmk

0

Если вы хотите require конкретный файл, который нужно указать путь abosolute к нему

require('.\functions.js'); 
Смежные вопросы