Итак, я использую модули в личном проекте по обычным причинам (защита пространства имен и обработка зависимостей (требуется) и общедоступное определение API (экспорт)). Я написал собственный метод моего требует() и я использую стандартный шаблон модуля - то есть:Javascript CommonJS - где находится модуль?
var myModule = (function() {
var exports = {};
function sayHello() {
return "hi";
}
exports.sayHello = sayHello;
return exports;
})();
Так что я хочу, чтобы стандартизировать свои вещи на CommonJS стандартной (это для серверного JS и мой вопрос не о стандартах CommonJS и других модулях). Все, что я читал о CommonJS, говорит о том, что модуль выглядит так:
function sayHello() {
return "hi";
}
exports.sayHello = sayHello
И все! Но это не модуль. Что-то должно обернуть это в качестве реального модуля! Я не нашел ни одного сайта, обсуждающего модули CommonJS, в котором говорится, как это превращается в настоящий модуль. Я что-то теряю, что все остальные знают?
Так что мои вопросы:
Что делать обертывание? - то есть, что превращает его в настоящий модуль? Я предполагаю, что библиотека какая-то.
Как выглядит этот окончательный, обернутый, модуль CommonJS? Я хочу написать реализацию стандарта CommonJS, но не могу найти документацию о том, как должен выглядеть этот окончательный модуль.
Является ли переменная «export» в глобальном масштабе? Если нет, то, что предоставляет объект экспорта модулю, если он явно не объявлен в теле кода модуля? И кто это делает - вызывающий модуль?
Dang. Это было просто, когда я написал это сам. Теперь это похоже на волшебство. Ссылка на некоторую исчерпывающую документацию была бы отличной.
Примечание: Я знаю очень мало о Node.js и не намерены использовать его в этом проекте, так что если вы ответите, пожалуйста, не отвечайте на Node.js-говорить.
«Что делает обертывание?» - Это зависит от среды хоста. Реализации браузера будут отличаться от реализаций Node.js, которые будут отличаться от реализаций WSH и так далее. – Quentin
* Я написал свой собственный метод require() * - Как вы это сделали? Что это делает? и почему вы изобретаете колесо? – Amit
NodeJS несовместим с CommonJS для вас. Среда браузера * не будет * делать это и использовать шаблоны CommonJS в них, вам понадобится пакет JavaScript, такой как Browserify или Webpack (по крайней мере до ES6 приземляется во всех основных браузерах) –