每次安装软件包时都必须重新安装 node_modules

时间:2021-05-11 21:36:17

标签: node.js reactjs

我有两个关于 react.js 的问题:

  1. 我正在使用 npx create-react-app xxx 来初始化我的项目,每次我在执行 yarn start 时都遇到错误
Error: Cannot find module 'lodash.template'

Require stack:

- C:\Desktop\react\myapp\node_modules\workbox-build\build\lib\populate-sw-template.js

- C:\Desktop\react\myapp\node_modules\workbox-webpack-plugin\build\generate-sw.js

- C:\Desktop\react\myapp\node_modules\workbox-webpack-plugin\build\index.js

- C:\\Desktop\react\myapp\node_modules\react-scripts\config\webpack.config.js

- C:\Desktop\react\myapp\node_modules\react-scripts\scripts\start.js

    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)

    at Function.Module._load (internal/modules/cjs/loader.js:725:27)

    at Module.require (internal/modules/cjs/loader.js:952:19)

    at require (internal/modules/cjs/helpers.js:88:18)

    at Object.<anonymous> (C:\Users\vanst\OneDrive\Desktop\react\myapp\node_modules\workbox-build\build\lib\populate-sw-template.js:10:18)

    at Module._compile (internal/modules/cjs/loader.js:1063:30)

    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)

    at Module.load (internal/modules/cjs/loader.js:928:32)

    at Function.Module._load (internal/modules/cjs/loader.js:769:14)

    at Module.require (internal/modules/cjs/loader.js:952:19) {

  code: 'MODULE_NOT_FOUND',

}

npm ERR! code ELIFECYCLE

npm ERR! errno 1

npm ERR! myapp@0.1.0 start: `react-scripts start`

npm ERR! Exit status 1

npm ERR!

npm ERR! Failed at the myapp@0.1.0 start script.

npm ERR! This is probably not a problem with npm. There is likely additional logging output above.



npm ERR! A complete log of this run can be found in:

npm ERR!     C:\Users\AppData\Roaming\npm-cache\_logs\2020-10-28T16_45_32_029Z-debug.log

我可以通过运行 npm install loadash --save 解决此问题,但我每次都必须手动安装此模块。

  1. 每次我在我的项目中安装一个新的包/库时,除非我重新安装 yarn start,否则 node_modules 将无法正常工作(通常它会报告缺少某个模块)。

有没有人遇到过类似的问题?

更新 1:问题 1 也可以通过删除 node_modules 并重新安装来解决。但是,我仍然不知道是什么导致了它以及为什么这样做会起作用。

更新 2:这是我第一次初始化项目时 package.json 的样子:

{
  "name": "temp",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.11.4",
    "@testing-library/react": "^11.1.0",
    "@testing-library/user-event": "^12.1.10",
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "react-scripts": "4.0.3",
    "web-vitals": "^1.0.1"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

10 个答案:

答案 0 :(得分:3)

  1. 尽量不要组合数据包管理器——它们不倾向于一起工作(锁信息不同步);如果您倾向于使用 yarn 来启动脚本,那么也可以使用 yarn 进行数据包管理
  2. 文件通常不会从 node_modules 中消失,可能是您机器上的一些防病毒操作,我对此表示高度怀疑
  3. 检查相应的锁文件(package-lock.jsonnpm,或yarn.lockyarn)包管理器是否已安装依赖项; yarn 还会在 .yarn-integrity 目录中创建额外的 node_modules 文件以跟踪已安装的模块

答案 1 :(得分:1)

您使用的是最新版本的 NPM/Yarn 吗?

  1. 选择一个,在同一个项目中有两个包管理器不好。

  2. 如果您选择了 yarn 则删除 package-lock.json 或如果您选择 npm 则删除 yarn-lock。

  3. 删除 node_modules 文件夹

  4. 将所选的更新到最新版本:

    npm install --global yarn

    npm install --global npm

  5. 使用一个安装所有软件包:

    纱线

    npm 安装

  6. 然后使用所选的安装 lodash.template:

    纱线添加 lodash.template

    npm 安装 lodash.template

  7. 尝试再次运行您的项目。步骤很简单,但一个干净的项目会有所不同。

答案 2 :(得分:0)

删除节点模块和package-lock.json 并运行

yarn

答案 3 :(得分:0)

lodash.template 包和 lodash 之间存在差异。如果你缺少 lodash.template 然后运行:

yarn add lodash.template

根据您的 package.json,您缺少此依赖项。通过添加 yarn 这将更新您的 package.json 和 yarn.lock 文件。该问题可能会永久修复。

答案 4 :(得分:0)

当您运行 yarn add lodash.template 时,它是否出现在您的 package.json 依赖项中? 也许 yarn 无法写入您的 package.json 文件?你的文件夹有写权限吗?也许 npx 已从 root 用户创建了此文件夹,而您没有任何编辑权限?

答案 5 :(得分:0)

请删除您的 node_modules 和 package-lock.json 并按照以下命令进行 lodash.template 安装:

$ {sudo -H} npm i -g npm
$ npm i --save lodash.template

答案 6 :(得分:0)

我也遇到过一次。安装具有管理员权限的软件包对我有用。

答案 7 :(得分:0)

您是否尝试删除 node_modules 文件夹并清理 npm 缓存。删除 node_modules 文件夹后尝试使用这些命令

$ npm 缓存清理
$ npm 安装

答案 8 :(得分:0)

您可以使用 npm ci 这将删除 node_modules 重新下载并为您安装它们。全部在一个命令中。您可以阅读更多相关信息here

答案 9 :(得分:0)

您的一个 require 语句很可能调用了一个将其列为“不需要的依赖项”的依赖项(节点模块)。任何时候导入依赖项, 包管理器将:

  • 导入
  • 导入其子依赖
  • 自动删除它列为“不需要”的任何内容

这适用于可能将模块设置为在多个环境中运行的情况。模块可以为测试环境导入一个子模块,但在生产环境中将其指定为不需要。

这是使用多个包管理器的问题。包管理器旨在确保您的所有包都能很好地协同工作。然而,如果你混合搭配,它们往往最终会相互对抗。