【问题标题】:Have to reinstall node_modules every time I install a package每次安装软件包时都必须重新安装 node_modules
【发布时间】:2021-08-02 06:53:40
【问题描述】:

我有两个关于 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"
    ]
  }
}

【问题讨论】:

  • 为什么不使用npm 而不是yarn
  • 或者,即使你不想切换,知道npm是否有同样的问题将是有价值的调试数据。
  • npm也存在同样的问题
  • 能否添加 package.json 来准确找出解决方案。但是,每次安装新库时都删除 node_modules 并不是一个好主意。
  • 请尝试 1. 删除 package-lock.json 和 yarn.lock 文件和 node_modules 文件夹。 2.纱线安装。 3.纱线启动。顺便说一句,你的操作系统是什么?它不起作用,请通过codepen或codesandbox分享您的代码。

标签: node.js reactjs


【解决方案1】:

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

  • 导入
  • 导入其子依赖项
  • 自动删除列为“不需要”的所有内容

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

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

【讨论】:

    【解决方案2】:

    您使用的是最新版本的 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 install lodash.template

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        $ npm 缓存清理
        $ npm 安装

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

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

              【讨论】:

                【解决方案8】:

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

                【讨论】:

                  【解决方案9】:

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

                  yarn add lodash.template
                  

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

                  【讨论】:

                  • "yarn add lodash.template" 没有将包添加到您在 package.json 中的依赖项列表中?这听起来像是真正的错误。
                  【解决方案10】:

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

                  yarn
                  

                  【讨论】:

                  • 谢谢。我知道这个解决方案。我的问题是什么原因造成的,以及如何一劳永逸地解决这个问题。
                  猜你喜欢
                  • 1970-01-01
                  • 2019-02-23
                  • 2020-09-13
                  • 2018-09-21
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2019-06-30
                  相关资源
                  最近更新 更多