Podstawy Node.js

Eksportowanie modułów

Tworzenie modułów własnoręcznie może służyć m.in. do porządkowania kodu programu: definicje różnych funkcji można umieścić w jednym pliku, a wywoływać je w innym. Przykładowo, można stworzyć moduł, zawierający funkcje realizujące różne działania na zmiennych tekstowych:

Plik utils.js

// odwracanie kolejności znaków
function backwards(text) {
  return text.split('').reverse().join('');
}

// usuwanie spacji
function removeSpaces(text) {
  return text.split(" ").join("");
}

// sprawdzanie, czy tekst jest palindromem
function isPalindrome(text) {
  var textWithoutSpaces = removeSpaces(text.toLowerCase());
  return textWithoutSpaces === backwards(textWithoutSpaces);
}

Aby określić, które funkcje mają być dostępne po zaimportowaniu modułu, należy tę informację zamieścić w obiekcie module. Obiekt module zawiera własność exports, która również jest obiektem. Funkcje, które mają być wyeksportowane, należy uczynić metodami obiektu module.exports:

module.exports.backwards = backwards;
module.exports.isPalindrome = isPalindrome;

Alternatywnie, wszystkie funkcje przeznaczone do wyeksportowania można zapisać w obiekcie module.exports za pomocą pojedynczego polecenia (umieszczanego zwykle na końcu pliku):

module.exports = { backwards, isPalindrome };

W odrębnym pliku można zaimportować stworzony moduł za pomocą polecenia require:

const utils = require('./utils.js');
// zakładając, że plik "utils.js" jest w tym samym katalogu, co ten plik

i korzystać z dostępnych w nim funkcji:

var palindrome = "Jeż largo gra lżej";
console.log(utils.backwards(palindrome))
console.log(utils.isPalindrome(palindrome))
jeżl arg ogral żeJ
true

Cały kod opisanego powyżej przykładowego programu, zawarty w dwóch plikach: utils.js i test.js, jest przedstawiony poniżej:

Plik utils.js

// odwracanie kolejności znaków
function backwards(text) {
  return text.split('').reverse().join('');
}

// usuwanie spacji
function removeSpaces(text) {
  return text.split(" ").join("");
}

// sprawdzanie, czy tekst jest palindromem
function isPalindrome(text) {
  var textWithoutSpaces = removeSpaces(text.toLowerCase());
  return textWithoutSpaces === backwards(textWithoutSpaces);
}

module.exports = { backwards, isPalindrome };

Plik test.js

const utils = require('./utils.js');

var notPalindrome = "To nie jest palindrom";
var palindrome = "Jeż largo gra lżej";

console.log(utils.backwards(notPalindrome))
console.log(utils.isPalindrome(notPalindrome))

console.log(utils.backwards(palindrome))
console.log(utils.isPalindrome(palindrome))

Wiersz poleceń

> node test
mordnilap tsej ein oT
false
jeżl arg ogral żeJ
true

Własności obiektu module.exports nie muszą być metodami; można eksportować również stałe:

const ver = '1.7';
module.exports.ver = ver;

Literatura