是否可以忽略缺失的 NPM(对等)依赖项?

use*_*281 5 npm reactjs

尝试着玩弄reactjs​​,而我的熟悉程度却非常有限npm

我跑:

npx create-react-app my-app

Installing template dependencies using npm...
npm WARN react-scripts@3.4.1 requires a peer of typescript@^3.2.1 but none is installed. 
You must install peer dependencies yourself.
npm WARN sass-loader@8.0.2 requires a peer of node-sass@^4.0.0 but none is installed. 
You must install peer dependencies yourself.
npm WARN sass-loader@8.0.2 requires a peer of sass@^1.3.0 but none is installed. 
You must install peer dependencies yourself.
npm WARN sass-loader@8.0.2 requires a peer of fibers@>= 3.1.0 but none is installed. 
You must install peer dependencies yourself.
npm WARN tsutils@3.17.1 requires a peer of typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta but none is installed. 
You must install peer dependencies yourself.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.1.2 (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.1.2: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.12 (node_modules\webpack-dev-server\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.12: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.12 (node_modules\watchpack\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.12: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.12 (node_modules\jest-haste-map\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.12: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})

> added 1606 packages from 750 contributors and audited 931160 packages
> in 165.13s
Run Code Online (Sandbox Code Playgroud)

reactjs是一个非常流行的框架。全新安装后开箱即用时
丢失是否正常?dependencies

我在某个地方看到我可以手动添加npm install --save-dev xxxxx.

这是我运行以下命令时返回的内容:

npm ls

    npm ERR! peer dep missing: typescript@^3.2.1, required by react-scripts@3.4.1
    npm ERR! peer dep missing: node-sass@^4.0.0, required by sass-loader@8.0.2
    npm ERR! peer dep missing: sass@^1.3.0, required by sass-loader@8.0.2
    npm ERR! peer dep missing: fibers@>= 3.1.0, required by sass-loader@8.0.2
    npm ERR! peer dep missing: typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev |
    | >= 3.7.0-beta, required by tsutils@3.17.1
    npm ERR! peer dep missing: typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev |
    | >= 3.7.0-beta, required by tsutils@3.17.1
    npm ERR! missing: mkdirp@0.5.3, required by node-pre-gyp@0.14.0
    npm ERR! missing: minimist@1.2.5, required by mkdirp@0.5.3
    npm ERR! missing: npm-normalize-package-bin@1.0.1, required by npm-packlist@1.4.8
    npm ERR! missing: npm-normalize-package-bin@1.0.1, required by npm-bundled@1.1.1
    npm ERR! missing: safe-buffer@5.1.2, required by readable-stream@2.3.7
    npm ERR! missing: safe-buffer@5.1.2, required by string_decoder@1.1.1
    npm ERR! missing: strip-ansi@3.0.1, required by gauge@2.7.4
    npm ERR! missing: strip-ansi@3.0.1, required by string-width@1.0.2
    npm ERR! missing: ansi-regex@2.1.1, required by strip-ansi@3.0.1
    npm ERR! missing: minimist@1.2.5, required by rc@1.2.8
    npm ERR! missing: wrappy@1.0.2, required by inflight@1.0.6
    npm ERR! missing: wrappy@1.0.2, required by once@1.4.0
    npm ERR! missing: minipass@2.9.0, required by tar@4.4.13
    npm ERR! missing: mkdirp@0.5.3, required by tar@4.4.13
    npm ERR! missing: safe-buffer@5.1.2, required by tar@4.4.13
    npm ERR! missing: yallist@3.1.1, required by tar@4.4.13
    npm ERR! missing: minipass@2.9.0, required by fs-minipass@1.2.7
    npm ERR! missing: safe-buffer@5.1.2, required by minipass@2.9.0
    npm ERR! missing: yallist@3.1.1, required by minipass@2.9.0
    npm ERR! missing: minipass@2.9.0, required by minizlib@1.3.3
    npm ERR! missing: mkdirp@0.5.3, required by node-pre-gyp@0.14.0
    npm ERR! missing: minimist@1.2.5, required by mkdirp@0.5.3
    npm ERR! missing: console-control-strings@1.1.0, required by npmlog@4.1.2
    npm ERR! missing: inherits@2.0.4, required by readable-stream@2.3.7
    npm ERR! missing: safe-buffer@5.1.2, required by readable-stream@2.3.7
    npm ERR! missing: safe-buffer@5.1.2, required by string_decoder@1.1.1
    npm ERR! missing: console-control-strings@1.1.0, required by gauge@2.7.4
    npm ERR! missing: string-width@1.0.2, required by gauge@2.7.4
    npm ERR! missing: strip-ansi@3.0.1, required by gauge@2.7.4
    npm ERR! missing: code-point-at@1.1.0, required by string-width@1.0.2
    npm ERR! missing: is-fullwidth-code-point@1.0.0, required by string-width@1.0.2
    npm ERR! missing: strip-ansi@3.0.1, required by string-width@1.0.2
    npm ERR! missing: number-is-nan@1.0.1, required by is-fullwidth-code-point@1.0.0
    npm ERR! missing: ansi-regex@2.1.1, required by strip-ansi@3.0.1
    npm ERR! missing: string-width@1.0.2, required by wide-align@1.1.3
    npm ERR! missing: minimist@1.2.5, required by rc@1.2.8
    npm ERR! missing: inherits@2.0.4, required by glob@7.1.6
    npm ERR! missing: once@1.4.0, required by glob@7.1.6
    npm ERR! missing: once@1.4.0, required by inflight@1.0.6
    npm ERR! missing: wrappy@1.0.2, required by inflight@1.0.6
    npm ERR! missing: wrappy@1.0.2, required by once@1.4.0
    npm ERR! missing: minipass@2.9.0, required by tar@4.4.13
    npm ERR! missing: mkdirp@0.5.3, required by tar@4.4.13
    npm ERR! missing: safe-buffer@5.1.2, required by tar@4.4.13
    npm ERR! missing: yallist@3.1.1, required by tar@4.4.13
    npm ERR! missing: minipass@2.9.0, required by fs-minipass@1.2.7
    npm ERR! missing: safe-buffer@5.1.2, required by minipass@2.9.0
    npm ERR! missing: yallist@3.1.1, required by minipass@2.9.0
    npm ERR! missing: minipass@2.9.0, required by minizlib@1.3.3
    npm ERR! missing: safe-buffer@5.1.2, required by readable-stream@2.3.7
    npm ERR! missing: safe-buffer@5.1.2, required by string_decoder@1.1.1
    npm ERR! missing: strip-ansi@3.0.1, required by gauge@2.7.4
    npm ERR! missing: strip-ansi@3.0.1, required by string-width@1.0.2
    npm ERR! missing: ansi-regex@2.1.1, required by strip-ansi@3.0.1
    npm ERR! missing: wrappy@1.0.2, required by inflight@1.0.6
    npm ERR! missing: wrappy@1.0.2, required by once@1.4.0
    npm ERR! missing: safe-buffer@5.1.2, required by tar@4.4.13
    npm ERR! missing: yallist@3.1.1, required by tar@4.4.13
    npm ERR! missing: safe-buffer@5.1.2, required by minipass@2.9.0
    npm ERR! missing: yallist@3.1.1, required by minipass@2.9.0
Run Code Online (Sandbox Code Playgroud)

那么,我是否缺少在反应设置/安装结束时显示的大约 5 个左右,或者我是否缺少npm ls指示的 ~30-50 个左右?

如果我的npm start项目,它似乎运行得很好。
我还需要所有这些缺失吗dependencies
您到底如何才能跟踪需要什么和不需要什么?
您如何知道何时遇到因缺少某些内容而导致的问题?

我尝试安装其中一些dependencies
但它们只是依赖于dependencies缺少的更多内容。
这似乎是一场永无休止的追逐尾巴的游戏。

我如何才能相信一切都井然有序?
如果我只是说搞砸了并继续尝试安装 50 多个模块(及其所有依赖项),它会起作用吗?我感到非常不知所措,我什至还没有写过一段代码。

谢谢!

编辑/更新:

从v10.15.3 -> v12.16.2升级(几年前安装了旧版本来玩 React Native)。删除了我之前的项目文件夹并重新创建了反应项目。所有缺失的依赖项都消失了,除了:

npm WARN tsutils@3.17.1 requires a peer of typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta |
| >= 3.7.0-dev || >= 3.7.0-beta but none is installed. You must install peer dependencies yourself.
Run Code Online (Sandbox Code Playgroud)

运行“npm ls”也只显示打字稿作为唯一缺少的东西。所以,我很高兴看到这与反应安装过程报告的内容相匹配。

这给我留下了以下问题。

1) Node/NPM 是否安装了“默认”包?我不明白当我自己没有安装任何额外的东西时,拥有旧版本的 Node 会如何突然使以前丢失的所有模块可用?特别是当它们都是第三方时,这就是 npm 的全部意义(能够管理第三方包/模块)。我怎样才能防止这种情况再次发生(当新版本出现时我是否总是必须立即更新节点?)

2)我尝试将打字稿安装为:

npm install -g typescript --save-dev
npm install typescript --save-dev
Run Code Online (Sandbox Code Playgroud)

但两人都没有收到离开的警告

我必须做:

npm install typescript
Run Code Online (Sandbox Code Playgroud)

最终得到了消失的警告。但这直接在我的 package.json 中将打字稿添加到了我的依赖项中。这是否意味着打字稿库将包含在我的最终项目中,并导出并上传到我的网站?显然我不希望那里有额外的文件(仅打字稿就大约 50MB)。

谢谢!

Mwa*_*ovi 4

Reactjs是一个非常流行的框架。

dependencies全新安装后开箱即用时丢失是否正常?

是的,这绝对正常。
这甚至不应该阻碍你学习的进步react
实际上,这种依赖关系场景更成问题npm,因为从 npm v3.0 开始,对等依赖项不会自动安装在 npm install 上

我可以手动添加缺少的内容npm install --save-dev xxxxx

是的,但这将是一场持续的战斗。
有相当多的软件包是为了完整而开发的install peer dependencies,如果您必须安装这些软件包,请更好地考虑使用它们peer dependencies

如果我运行npm start该项目运行得很好。
我还需要所有这些缺失吗dependencies
您到底如何才能跟踪需要什么和不需要什么?
您如何知道何时遇到因缺少某些内容而导致的问题?

不,您并不完全需要它们,这就是项目运行良好的原因。

事实上,让我给你一些关于这个reactjs场景的见解。
为了让您重温npm 依赖的痛苦,这就是 React 团队进行创新的原因,
create-react-app使得开始react开发变得非常容易和快速。

因此,当您运行npx create-react-app my-app启动一个react项目时,
它在后台依赖于一个名为“react-scripts”的主要包。
事实上,请注意,当您运行时npm start,它会调用react-scripts start.

其中许多是的peer dependencies要求。如果你检查你会看到这个dependenciesreact-scripts
./node_modules/react-scripts/package.json

我尝试安装一些依赖项,
但它们只是依赖于更多缺少的依赖项。
这似乎是一场永无休止的追逐尾巴的游戏。
我如何才能相信一切都井然有序?
如果我只是说搞砸了并继续尝试安装 50 多个模块(及其所有依赖项),它会起作用吗?

别去那里!这就是 React 推荐使用 的原因create-react-app
它将安装必须具备的依赖项。
一旦你的项目认为某个包是必须的,npm start就会失败。
此时,您可以运行npm i --save @packagenpm --save-dev @package

注意:
替换@package为您的项目所需的包。
请注意“i”,它是“install”的缩写