这是 ES6 特定的副本这个所以线程 https://stackoverflow.com/questions/3225251/how-can-i-share-code-between-node-js-and-the-browser,其中详细介绍了如何创建可导出以在浏览器和节点上下文中使用的 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
(i.e., 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
可以导出到浏览器和节点的文件吗?
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)