每次安装包都必须重新安装node_modules

15

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

  1. 我使用 npx create-react-app xxx 初始化我的项目,但每次在执行 yarn start 时都会出现错误。
  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"
    ]
  }
}


3
为什么不使用 npm 而使用 yarn - dev55555
或者,即使您不想切换,了解npm是否存在相同的问题也将是有价值的调试数据。 - machineghost
你能否添加package.json以确切地找到解决方案。然而,每次安装新库时删除node_modules并不是一个好主意。 - Tamil.S
你同时使用 yarnnpm 吗?在你的问题中,你运行了 yarn start 脚本,但安装的包是 npm install loadash --save - miraj
1
请尝试以下操作:1. 删除 package-lock.json、yarn.lock 文件和 node_modules 文件夹。2. 运行 yarn install。3. 运行 yarn start。顺便问一下,您的操作系统是什么?如果这些步骤无效,请通过 codepen 或 codesandbox 分享您的代码。 - TopW3
显示剩余3条评论
10个回答

3
  1. 尽量不要混合使用软件包管理器 - 它们通常不能共同使用(锁定信息不会同步); 如果你倾向于使用 yarn 来启动脚本,则也应该使用 yarn 进行软件包管理。
  2. 文件通常不会从 node_modules 中消失,可能是您的计算机上的某种杀毒软件导致,但我非常怀疑这一点。
  3. 检查相应的锁定文件 (package-lock.json 用于 npm,或 yarn.lock 用于 yarn) 是否已安装依赖项; yarn 还会在 node_modules 目录中创建额外的 .yarn-integrity 文件以跟踪已安装的模块。

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. 使用一个命令安装所有软件包:

    yarn

    npm install

  6. 然后使用所选的包管理器安装lodash.template:

    yarn add lodash.template

    npm install lodash.template

  7. 尝试重新运行项目。这些步骤很简单,但清洁的项目会有所不同。


0

lodash.template包和lodash之间有区别。 如果您缺少lodash.template,则运行:

yarn add lodash.template

根据你的 package.json 文件,你缺少这个依赖项。通过使用 yarn 添加它,将会更新你的 package.json 和 yarn.lock 文件。这个问题很可能会被永久性地解决。


"yarn add lodash.template" 没有将该包添加到您的 package.json 的依赖列表中?这听起来像是真正的 bug。 - deezy

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

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

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

0
我也遇到过这种情况。以管理员权限安装包对我很有帮助。

0

你尝试过删除 node_modules 文件夹并清除 npm 缓存吗?在删除 node_modules 文件夹后,尝试使用以下命令:

$ npm cache clean
$ npm install


0

你可以使用 npm ci 命令,它会删除 node_modules 目录并重新下载和安装依赖项。这一切只需要一个命令即可完成。你可以在 这里 阅读更多相关信息。


0

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

  • 导入它
  • 导入它的子依赖项
  • 自动删除它已列为“不需要的”东西

这是为多种环境下运行的模块设置而设计的情况。模块可能会为测试环境导入子模块,但在生产环境中将其指定为不需要的。

这就是使用多个包管理器的问题所在。包管理器旨在确保所有软件包相互兼容。但是,如果混合使用,它们通常会相互对抗。


0

删除 node modules 和 package-lock.json,然后运行

yarn

谢谢。我知道这个解决方案。但我的问题是关于是什么原因导致了这个问题,以及如何一劳永逸地解决它。 - Adam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接