当前位置: 首页 > 知识库问答 >
问题:

在require中定义全新模块时使用导出是否合适。js?

弓玉书
2023-03-14

既然需要。js是AMD模块加载器,同时定义了如下新模块:

define(["jquery"],function($){
   var _private;
   var obj = {
       pubFunc:...
   }
   return obj;
});

define(["jquery","exports"],function($,exports){
 var pubFunc;
 exports.pubFunc = pubFunc;

});

在Require.js定义新模块中,第二个不合适吗?

共有1个答案

曾阳飙
2023-03-14

TL;DR:首先是RequireJS是如何设计的(使用这个);第二个不是。

更多信息:

看起来您将RequireJS与节点的require混淆了。

在第二种情况下,通过向后导出(导出到应该是依赖项的内容中),您几乎颠倒了依赖项链的方向。

实际上,这在大多数情况下都有效:

exports.pubFunc = pubFunc;

迄今为止:

  • JavaScript对象通过引用传递,因此属性将被添加到RequireJS持有的exports对象中;和
  • 每当需要导出时,RequireJS将继续分发修改后的导出对象

然而,这完全依赖于要求JS的缓存。作为一种优化,要求JS存储模块的导出,而不是每次都加载文件;因此缓存版本的导出被重新分发(与您添加的属性一起完成)。

因此,当缓存的对象没有被传递时,这将被打破,例如在不同的要求JS上下文中。

您应该将导入视为不可变的,即使您可以修改它们。

 类似资料:
  • 我有一个python程序,它在运行之前加载了大量数据。因此,我希望能够在不重新加载数据的情况下重新加载代码。对于常规python, reload\u bar我看不到我的更改。我还尝试了pyximport。build\u module()运气不好--模块已重建,但没有重新加载。我在一个“普通”的python shell中运行,如果有什么不同的话,就不是IPython。

  • 我最近创建了一个基本的HelloWorld ODL模块,如本文所述,我能够使其工作。例如,我可以对它运行restful POST命令并得到“hello”回复。 现在,我要做的是将这个模块安装到从集成发行版Repos编译的实际ODL中。 知道针对Hello项目的会将此模块发布到我的本地repo中,我将继续讨论实际的ODL集成/发行版 在ODL的文件中,我添加了以下配置文件: 然后,我成功地在ODL上

  • 问题内容: 在我正在合作的项目中,关于可以使用哪种模块系统,我们有两个选择: 导入使用的模块,并使用导出和。 使用ES6导入模块,并使用ES6导出 相互使用是否对性能有好处?如果要在Node模块上使用ES6模块,还有其他什么应该知道的吗? 问题答案: 相互使用是否对性能有好处? 请记住,还没有JavaScript引擎本身支持ES6模块。您说自己正在使用Babel。无论如何,Babel都会默认将其转

  • 我想在任何目录的任何脚本中导入自定义编写的函数,就像在任何脚本中导入请求模块一样。我正在运行Ubuntu和Python 3.9 编辑:我按照本教程完成了我的要求-https://packaging.python.org/tutorials/packaging-projects/

  • 问题内容: 我已尝试找到有关最佳使用还是全面的指南。我刚开始使用Python,并且正在尝试着眼于最佳实践。 基本上,我希望有人能分享他们的经验,其他开发人员有什么喜好,以及避免遇到麻烦的最佳方法是什么? 问题答案: 和之间的区别主要是主观的。选择最喜欢的一个,并在使用中保持一致。这里有一些要点可以帮助你做出决定。 优点: - 减少维护你的import报表。无需添加任何其他导入即可开始使用模块中的另

  • 问题内容: 用Java编写了一个随机模拟,该模拟从磁盘上的几个CSV文件加载数据(总计约100MB),并将结果写入另一个输出文件(数据不多,只有布尔值和几个数字)。还有一个参数文件,对于不同的参数,模拟输出的分布可能会发生变化。为了确定正确/最佳的输入参数,我需要针对多个输入参数配置运行多个模拟,并查看每组中输出的分布。根据参数和随机性,每次仿真需要0.1-10分钟。 我一直在阅读有关Hadoop