Узел использует модульную систему под названием CommonJS. Каждый файл в этих примерах является одним модулем. Любой из этих модулей может быть включен в другой скрипт с помощью функции require()
.
var Strings = require('./path/to/1_8.js');
module.exports
определяет, что получает возвращается, когда вам требуется определенный файл. В этом случае он возвращает объект Strings
.
В данном конкретном примере объект Strings
присваивается IIFE, который возвращает объект с помощью метода isRotation
. Таким образом, чтобы использовать эту функцию вы могли бы сделать:
var Strings = require('./path/to/1_8.js');
Strings.isRotation('foo', 'foobar');
Как правило, при использовании CommonJS, нет необходимости IIFE конструкций. Я подозреваю, что автор пытается упростить UMD (Universal Module Definition). Если используется в браузере вместо nodejs, объект Strings
станет глобальным (поскольку он не имеет объявления var). Однако в браузере module
будет неопределенным, что приведет к ошибке. Это кажется бессмысленным. Есть также некоторые проблемы, в том числе отсутствующие точки с запятой.
Вот как я бы написать этот модуль:
function isSubstring(str1, str2) {
return str1.indexOf(str2) !== -1;
}
function sameLengthAndNotBlank(str1, str2) {
var len = str1.length;
return len === str2.length && len > 0;
}
module.exports = {
isRotation: function(str1, str2) {
if(!sameLengthAndNotBlank(str1, str2)) {
return false;
}
if(isSubstring(str1 + str1, str2)) {
return true;
}
}
};
Чтобы запустить этот модуль, вам нужно иметь Node.js установлен. Затем просто клонируйте репозиторий и следуйте instructions для запуска тестов.
git clone https://github.com/gaylemcd/ctci.git
cd ctci/javascript
npm install
npm install -g mocha
mocha --recursive
Если вы хотите, чтобы требовать их самостоятельно, просто требуется создать свой собственный файла JavaScript в CTCI/JavaScript:
//ctci/javascript/string-example.js
var Strings = require('./lib/data-structures/chapter-1/1_8.js');
console.log(Strings.isRotation('foo', 'foobar'));
Затем запустите его с узлом:
node string-example.js
спасибо за ответ ... можете ли вы рассказать мне в своем локальном, что и все, что мне нужно для установки для выполнения кода ... –
Вам нужно исследовать nodejs. Я отредактировал свой ответ, чтобы добавить некоторые основные инструкции. –
Можете ли вы рассказать мне, как выполнить и посмотреть –