Не могу использовать «require» для загрузки модуля - PullRequest
0 голосов
/ 09 октября 2019

Я не могу успешно использовать «require» для загрузки модуля. Моя книжная доза не дает достаточно контекста.

утверждает, что это все, что мне нужно в файле модуля (файл называется "newjavascript.js":

var days = ["monday", "tuesday", "wednesday", "thursday"];

exports.name = function(number) {

return days[number];

};

exports.number = function(name) {

return days.indexOf(name);

};

И эта функция require у меня есть в виде отдельного файлав netbeans:

function require(InterFaceFile) {

var code = new Function("exports", readFile(InterFaceFile));

var exports = {};

code(exports);

return exports;

}

console.log(weekDay.name(1));

output: "weekDay.name is not a function"

это тот же модуль, который он описывает ранее в книге, он упоминает, что это больше для браузера:

(function(exports) {

 var days = ["monday", "tuesday", "wednesday", "thursday"];

 exports.name = function(number) {

 return days[number];

 };

 exports.day = function(name) {

 return days.indexOf(name);

 };

})(this.weekday = {});

console.log(weekday.name(1));

Я понимаю, что "weekDay" этонет, где в первом файле, поэтому я попытался использовать имя файла на его месте (newjavascript.js, с и без кавычек), а также попытался обернуть весь первый кусок кода в функцию с именем "weekDay", я попытался в браузере ив netbeans без удачи. Я чувствую, что если я смогу это прояснить, то с этого момента будет гладко! Спасибо!

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

Начиная с кода браузера :

(function(exports) {

var days = ["monday", "tuesday", "wednesday", "thursday"];

exports.name = function(number) {
    return days[number];
};

exports.day = function(name) {
    return days.indexOf(name);
};

})(window.weekday = {});

console.log(weekday.name(1));

Это выполняется в браузере и регистрирует "вторник" на консоли. this.weekday был заменен на window.weekday для ясности - запись this.weekday={} для использования weekday в качестве имени глобальной переменной вводит в заблуждение.

Код делает жесткий код телоанонимной функции с именем параметра exports, и вызывает ее только что созданным объектом window.weekday. После вызова weekday значение параметра exports было обновлено новыми методами.

Код анонимной функции представлен для моделирования работы require.


Код сервера

Теперь рассмотрим обобщение модели анонимной функции путем создания функции require, которую

  • создает и возвращаетновый exports объект для вас,
  • принимает путь к файлу файла, содержащего код тела, для изменения exports,
  • выполняет код тела внутри функции, котораяпринимает exports в качестве фактического аргумента под формальным именем параметра «export».

Вы можете затем назвать его как

var weekday = require( filePath_of_script);

Использование путей к файлам сценариев требуетдоступ к файловой системе. Поскольку неограниченный доступ недоступен в браузерах, в этом примере показан метод readFile, упомянутый в книге:

function readFile( filePath) { // dummied example
  let fileContent =
	` 
	var days = ["monday", "tuesday", "wednesday", "thursday"];
	exports.name = function(number) {
		return days[number];
	};

	exports.number = function(name) {
		return days.indexOf(name);
	};
	`;
	return fileContent;
}

function require(InterFaceFile) { // from netbeans
    // create a new function with first parameter named "exports":
    var code = new Function("exports", readFile(InterFaceFile));
    var exports = {};
    code(exports);
    return exports;
}

// usage example

var weekdays = require("newjavascript.js"); // create and save exports
console.log( weekdays.name( 1));

Примечание

  • Книга (или netbeans) представляет простую реализацию require - метод узла require узла имеет дополнительные функции, такие каквызов кода тела с объектом exports в качестве значения this.
  • Две строки, показанные после объявления функции require в сообщении

    console.log(weekDay.name(1));
    output: "weekDay.name is not a function"
    

    :не на своем месте и должен быть удален.

  • В этих примерах weekDay - это имя переменной, используемой для сохранения объекта экспорта, возвращаемого require, или в случае анонимной функцииимя свойства окна, используемое в качестве переменной.

0 голосов
/ 09 октября 2019

Кажется, что в вашем вопросе (или в вашем коде) пропущены некоторые строки, я думаю, что это сработает:

// code for require here
const weekDay = require("/path/to/weekday.js"):
console.log(weekDay.name(1)):

Это похоже на упражнение, чтобы понять, как работает стиль NodeJS. Или, если вы используете другой метод (шаблон модуля):

const weekDay = (function(exports) {
 var days = ["monday", "tuesday", "wednesday", "thursday"];
 exports.name = function(number) {
 return days[number];
 };

 exports.day = function(name) {
 return days.indexOf(name);
 };

})({});

console.log(weekDay.name(1));

Отсутствующий шаг на самом деле «требует» модуля и привязывает результат к переменной, которую вы можете использовать для вызова функций!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...