如何在前端和后端(ES6)之间共享JavaScript代码

时间:2020-01-14 15:18:35

标签: javascript node.js ecmascript-6 dry es6-modules

这是this SO thread的ES6特定副本,其中详细说明了如何创建可导出以在浏览器和节点上下文中使用的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未定义,则您必须在浏览器中,在这种情况下,mymodulewindow上声明(即this)。或者,如果定义了exports,则它位于node上下文中,在这种情况下,您只能var mymodule = require('mymodule')。在两种环境下,您都可以将其用作mymodule.test()。大。

与此有关的一个问题是exports.whatever在当前作用域中没有公开whatever,因此,如果您想在模块中使用whatever,最终需要做< / p>

var whatever = 3;
exports.whatever = whatever;

可能会很麻烦,并且容易忘记。

另一方面,在ES6中,您可以执行export const whatever = 3,这将导出并公开whatever,这是DRYer,因此易于维护。

新问题是

  1. export必须位于文件的顶层,这意味着您不能使用ES5答案中的语法
  2. export不是函数(是吗?),所以您不能使用type of来实现条件浏览器/节点上下文。

因此,我的问题是:创建.js文件并可以同时导出到浏览器和节点的ES6版本是什么?

0 个答案:

没有答案