NodeJS: Статический импорт возможен?

Короче вопрос:

Есть ли способ статически импортировать функции другого файла JS в NodeJS? (Как статический импорт Java?)

Пример того, что я хотел бы сделать:

У меня есть файл m1.js который содержит функции:

function add(x,y) { return x + y }
exports.add = add

Тогда у меня есть файл app.js который импортирует m1.js:

m1 = require('./m1')
var result = m1.add(3,4)

Теперь, что я хотел бы сделать, это импортировать функции m1.js так что я могу звонить им, без необходимости префикса звонков с m1.*:

m1 = require('./m1')
var result = add(3,4)  // instead of m1.add(3,4)

Что я пробовал до сих пор:

Я попробовал следующее, в файле m1.js:

function add(x,y) { return x + y }
exports.static = function(scope) { scope.add = add }

и попытался импортировать m1.js в app.js как следует, но не смог найти add(x,y):

require('./m1').static(this)
var result = add(3,4)

1 ответ

Решение

Вы были близки с вашей попыткой. Одно небольшое изменение, которое вы должны сделать, это заменить this с global когда static называется:

require('./m1').static(global)
var result = add(3,4)

Из документации:

Глобальный

  • {Object} Объект глобального пространства имен.

В браузерах область верхнего уровня является глобальной областью действия. Это означает, что в браузерах, если вы находитесь в глобальной области видимости var something определит глобальную переменную. В Node все по-другому. Область верхнего уровня не является глобальной областью; var something внутри модуля Node будет локальным для этого модуля.

Другие вопросы по тегам