UMD和CommonJS(CJS)软件包文件夹有什么不同,我应该使用哪个?

kus*_*ust 14 javascript commonjs npm umd

我安装了package.json这样的reactjs和react-dom

"dependencies": {
   "bootstrap": "^v4.1.1",
   "popper.js": "^1.14.3",
   "react": "^v16.4.1",
   "react-dom": "^16.4.1"
}
Run Code Online (Sandbox Code Playgroud)

它正确下载了react文件夹和react-dom文件夹。

这两个文件夹都有cjs和umd文件夹,并且它们都有很多js文件。

对我来说,无法找到两个文件夹中文件之间的差异。

像这样:

URL: node_modules/react/umd
  react-development.js
  react-production.min.js



URL : node_modules/react/cjs
   react-development.js
   react-production.min.js
Run Code Online (Sandbox Code Playgroud)

与react-dom几乎相同。它还具有cjs和umd文件夹,我不知道应该使用哪个文件夹中的哪个文件来开发React应用程序或网站。

big*_*ose 14

JavaScript最初仅用于交互式浏览器。与Node一起,可在非浏览器上下文中使用。由于这一因素和其他因素,模块的格式不兼容:

  • CommonJS ”规范描述了exports对象的使用,该对象是用于声明和发现从模块导出的名称的API。没有允许在交互式浏览器中加载CommonJS模块。NodeJS是CommonJS格式的最流行实现。

  • 异步模块定义 ”(AMD)描述了如何在将JavaScript模块加载到交互式浏览器中的前提下捆绑JavaScript模块。RequireJS是较流行的模块支持库之一,它使用AMD模块。

  • 因为AMD和CommonJS都非常流行并且彼此难以理解,所以“ 通用模块定义 ”(UMD)是一种模式,试图以较复杂的格式为代价,使两者都可以使用的模块。

  • 最近,ECMAScript 2015定义exportimport语法(与上述所有语法不同)以支持模块。

您应该使用哪个?您需要根据构建系统中将使用这些模块的内容来回答。

今天,最可能的答案是:使用UMD模块。将来的某个时候可能是:使用ECMAScript模块;但是我们(2019)尚未就如何分配这些内容达成共识。

  • 截至 2021 年,对于前端项目,始终使用/分发 ES 模块。除非您正在研究一些超级遗留技术,否则分发 CommonJS 已经没有意义了。即使在这种情况下,我也强烈建议您迁移遗留技术,而不是继续支持它。 (3认同)