【问题标题】:Why does installing modules from NPM or Yarn depend on node?为什么从 NPM 或 Yarn 安装模块依赖于节点?
【发布时间】:2020-06-24 12:26:12
【问题描述】:

我正在使用 React (create-react-app)

我对我们从 NPM 或 Yarn 安装包时的理解是:它找到模块并将代码克隆到 node_modules 中,模块也可以有自己的 package.json 并递归地克隆依赖的模块。

如果我们使用的是纯客户端应用程序(比如我的 React),为什么安装过程取决于节点版本?就像我得到 jsdom@16.2.0:引擎“节点”与此模块不兼容。预期版本“>=10”。得到“9.11.2”

【问题讨论】:

  • FWIW,jsdom 不是客户端库。它是服务器/开发机器端(如果您不喜欢将笔记本电脑称为服务器,那么我们将其称为开发机器)。在客户端你不需要 jsdom,因为浏览器有一个真正的 DOM 供你使用。 jsdom 库被非客户端代码使用,例如 react jsx 编译器或 react 预渲染器,以在开发笔记本电脑(而不是浏览器)上运行客户端代码。这样的代码在节点上运行

标签: node.js npm webpack yarnpkg


【解决方案1】:

随着 Node.js 的更新版本的发布,新功能被添加并且旧功能被弃用。使用这些新功能的库可以决定锁定使用其库所需的最低 Node.js 版本。

如果你使用低版本 Node.js 的库,该库可能无法工作。

如果您正在处理需要不同版本 Node.js 的多个项目,请考虑安装和使用 nvm。使用 nvm,您可以根据项目需要在多个版本之间切换。 https://github.com/nvm-sh/nvm

【讨论】:

  • 我理解这一点,但就我而言(客户端 ReactJs 应用程序),我所有的 JavaScript 代码都在浏览器中运行。在这种情况下,为什么模块依赖于节点版本?
  • 是的。如果您正在编写 vanilla js,则不需要 nodejs。您的浏览器可以直接运行它。但是 React 包含了很多浏览器不理解的特性。像类一样,在某些情况下是装饰器。这些特性需要转译成浏览器能理解的es5。为此,我们需要 nodejs 来运行 webpack 或 babel 或其他工具来转译它。
  • 转译后。你可以像没有 nodejs 的 vanillajs 一样运行它。这就是为什么许多人将其托管为静态页面或 github 页面、Netlif 和 A​​WS S3。
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 2013-08-26
  • 1970-01-01
  • 2022-01-03
  • 2020-12-11
  • 1970-01-01
  • 2018-01-02
  • 2023-02-11
相关资源
最近更新 更多