簡體   English   中英

每次安裝 package 時都必須重新安裝 node_modules

[英]Have to reinstall node_modules every time I install a package

我有兩個關於 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. 每次我在項目中安裝新的包/庫時,除非我重新安裝node_modules ,否則yarn start將無法正常工作(通常它會報告缺少某些模塊)。

有沒有人遇到過類似的問題?

更新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"
    ]
  }
}

  1. 盡量不要組合數據包管理器——它們不傾向於一起工作(鎖信息不同步); 如果您傾向於使用yarn來啟動腳本,那么也可以使用yarn進行數據包管理
  2. 文件通常不會從node_modules中消失,可能是您機器上的一些防病毒操作,我非常懷疑這一點
  3. 檢查相應的鎖文件( package-lock.jsonnpmyarn.lockyarn )是否包管理器已安裝依賴項; yarn 還在node_modules目錄中創建額外.yarn-integrity文件來跟蹤已安裝的模塊

你使用的是最新版本的 NPM/Yarn 嗎?

  1. 選一個,同一個項目里有兩個package管理器不好。

  2. 如果您選擇了 yarn,請刪除 package-lock.json;如果您選擇 npm,請刪除 yarn-lock。

  3. 刪除 node_modules 文件夾

  4. 將選擇的更新到最新版本:

    npm 安裝 --global yarn

    npm 安裝 --global npm

  5. 使用一個安裝所有軟件包:

    npm安裝

  6. 然后使用選擇的安裝 lodash.template:

    紗線添加 lodash.template

    npm 安裝lodash.template

  7. 再次嘗試運行您的項目。 步驟很簡單,但一個干凈的項目會有所作為。

刪除節點模塊和 package-lock.json 並運行

yarn

lodash.template package 和lodash之間存在差異。 如果您缺少 lodash.template 然后運行:

yarn add lodash.template

根據您的package.json您缺少此依賴項。 通過添加紗線,這將更新您的 package.json 和yarn.lock文件。 該問題可能會被永久修復。

當您運行yarn add lodash.template時,它是否出現在package.json的依賴項中? 也許紗線不能寫你的package.json文件? 你的文件夾有寫權限嗎? 也許npx已經從 root 用戶創建了這個文件夾,而您沒有任何編輯權限?

請刪除您的 node_modules 和 package-lock.json 並按照以下命令進行 lodash.template 安裝:

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

我也發生過一次。 安裝具有管理員權限的軟件包對我有用。

您是否嘗試刪除 node_modules 文件夾並清理 npm 緩存。 刪除 node_modules 文件夾后嘗試使用這些命令

$ npm 緩存清理
$ npm 安裝

您可以使用npm ci這將刪除 node_modules 重新下載並為您安裝它們。 全部在一個命令中。 你可以在這里閱讀更多關於它的信息

您的require語句之一很可能調用將其列為“不需要的依賴項”的依賴項(節點模塊)。 每當導入依賴項時,package 管理器將:

  • 導入它
  • 導入其子依賴項
  • 自動刪除它列為“不需要”的任何內容

這適用於可以將模塊設置為在多個環境中運行的情況。 該模塊可以為測試環境導入一個子模塊,但在生產環境中將其指定為不需要。

這是使用多個 package 管理器的問題。 package 管理器旨在確保您的所有封裝都能很好地協同工作。 但是,如果您混合搭配,它們通常會最終相互對抗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM