Это ES6-специфицированный c дубликат этого потока SO , в котором подробно описано, как создать javascript модуль, который можно экспортировать для использования как в контексте браузера, так и в контексте узла.
Я был бы так же рад получить ответ там, если это более уместно.
Для справки приведу цитату из решения ES5, а также проблемы, возникающие при попытке перевести его на ES6. (Кредит для пользователей @caolan и @broesch.)
(function(exports){
// Your code goes here. For example:
exports.test = function(){
return 'hello world'
};
})(typeof exports === 'undefined'? this.mymodule = {} : exports);
Таким образом, если exports
не определено, вы должны быть в браузере, в этом случае mymodule
объявляется в window
( т.е. this
). Или, если определено exports
, это в контексте node
, и в этом случае вы можете просто var mymodule = require('mymodule')
. И в любой среде вы можете использовать его как mymodule.test()
. Отлично.
Одна из проблем заключается в том, что exports.whatever
не отображает whatever
в текущей области, поэтому, если вы хотите использовать whatever
в модуле, вам в конечном итоге потребуется
var whatever = 3;
exports.whatever = whatever;
, который может стать громоздким и легко забываемым.
В ES6, с другой стороны, вы можете сделать export const whatever = 3
, который будет и экспортировать, и выставлять whatever
, который является СУХИМЫМ и, следовательно, более простым в обслуживании.
Новые проблемы заключаются в том, что
export
должен находиться на верхнем уровне файла, что означает, что вы не можете использовать синтаксис из ответа ES5 export
не является функцией (не так ли?), Поэтому вы не можете использовать type of
для получения условного контекста браузера / узла.
Итак, мой вопрос: какова версия ES6 для создания файла .js
, который можно экспортировать как в браузер, так и в узел?