javascript - UMD 和 CommonJS (CJS) 包文件夹有何不同,我应该使用哪个?

标签 javascript npm commonjs 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"
    }

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

这两个文件夹都有cjsumd文件夹,里面有很多JavaScript文件。

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

像这样:

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

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

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

最佳答案

JavaScript 最初仅用于交互式浏览器。对于 NodeJS,它用于非浏览器上下文。由于这个和其他因素,模块存在不兼容的格式:

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

  • Asynchronous Module Definition ”(AMD)描述了如何在假设它们将被加载到交互式浏览器中的情况下捆绑 JavaScript 模块。 RequireJS 是更流行的模块支持库之一,它使用 AMD 模块。

  • 由于 AMD 和 CommonJS 都非常流行并且彼此之间无法理解,“Universal Module Definition ” (UMD) 是一种模式,可以制作一个可以被两者使用的模块,但代价是格式更复杂。

  • 最近,ECMAScript 2015 defines export and import syntax (与上述所有不同)以支持模块。

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

今天(2022 年 2 月),最有可能的答案是:使用 ECMAScript 模块,这些模块现已支持多年,在 NodeJS 中和 major browsers .

如果您需要支持非常过时的 JavaScript 引擎,您可能需要一种较早的格式,但您应该有一个时间表来放弃对这些引擎的支持。

关于javascript - UMD 和 CommonJS (CJS) 包文件夹有何不同,我应该使用哪个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51233240/

相关文章:

reactjs - CommonJS 导入与 ES6 导入

javascript - 为什么下面的 `exports = { z: function() {} };` 不起作用

javascript - 如何用 JavaScript 创建一个简单的历史跟踪器?

javascript - Context.Consumer 源值映射不渲染任何元素

typescript - 无法在 TypeScript 项目中使用 @faker-js/faker —— 未定义 —— 但旧的 "faker"导入可以工作。为什么?

node.js - 使 npm 包子模块可用

javascript - CommonJS 中的 'promise' 抽象有什么好处?

javascript - 如果选中输入类型复选框,则创建和删除输入类型文本

javascript - 加载路径中包含字符串或 astrix 的 JSON

node.js - Webpack 已使用与 API 架构不匹配的配置对象进行初始化。 webpack 安装通过 "npm install webpack"