为什么 npm 运行 dev 即使安装了所有依赖项也会出错?

Why npm run dev giving error even all dependencies are installed?

问题:

正在尝试 npm run dev 启动服务器,但它给出了以下错误,尽管完全相同的代码对其他团队成员工作正常。

错误:

Error: Cannot find module 'braintree'
Require stack:
- C:\Users\Zainulabideen\Documents\GitHub\wine\dist\routes\api\braintree\clientToken.js
- C:\Users\Zainulabideen\Documents\GitHub\wine\dist\app.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:982:15)
    at Function.Module._load (internal/modules/cjs/loader.js:864:27)
    at Module.require (internal/modules/cjs/loader.js:1044:19)
    at require (internal/modules/cjs/helpers.js:77:18)
    at Object.<anonymous> (C:\Users\Zainulabideen\Documents\GitHub\wine\dist\routes\api\braintree\clientToken.js:5:17)
    at Module._compile (internal/modules/cjs/loader.js:1158:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10)
    at Module.load (internal/modules/cjs/loader.js:1002:32)
    at Function.Module._load (internal/modules/cjs/loader.js:901:14)
    at Module.require (internal/modules/cjs/loader.js:1044:19) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    'C:\Users\Zainulabideen\Documents\GitHub\wine\dist\routes\api\braintree\clientToken.js',
    'C:\Users\Zainulabideen\Documents\GitHub\wine\dist\app.js'
  ]
}
[nodemon] app crashed - waiting for file changes before starting...

相关代码:

app.js

....

const brainTreeToken = require("./routes/api/braintree/clientToken");
app.get("/client_token", function (req, res) {
    brainTreeToken.braintreeClient(req, res);
});

....

clientToken.js

var braintree = require("braintree");
import { useDispatch } from "react-redux";

const braintreeClient = (req, res) => {
    var gateway = braintree.connect({
        environment: braintree.Environment.Sandbox,
        merchantId: "XXXXXXXXXXX",
        publicKey: "XXXXXXXXXXXX",
        privateKey: "XXXXXXXXXXX",
    });

    gateway.clientToken.generate({}, function(err, response) {
        var clientToken = response.clientToken;
        res.send(clientToken);
    });
};

module.exports = {
    braintreeClient: braintreeClient,
};

Package.json

{
    "name": "XYZ",
    "version": "0.0.10",
    "private": true,
    "description": "React APP",
    "license": "ISC",
    "author": "Temp",
    "main": "index.js",
    "scripts": {
        "start": "node dist/app.js",
        "start:prod": "npm i --production && npm run build && npm run server",
        "dev": "echo Running App Under Watcher Nodemon Hot Deploy && nodemon dist/app.js",
        "test": "jest --bail",
        "test:watch": "jest --watch",
        "build": "sh ./scripts/build-app.sh",
        "build:dev": "SET NODE_ENV=development && npm run build",
        "build:prod": "SET NODE_ENV=production npm run build",
        "server": "node dist/app.js",
        "server:dev": "SET NODE_ENV=development npm run server",
        "server:prod": "SET NODE_ENV=production npm run server",
        "docker": "sh ./scripts/build-docker.sh",
        "webpack": "rimraf ./build && webpack --config tools/webpack.config.js",
        "lint": "eslint src/**/*.js",
        "hotstart": "nohup node src/server.js > nohup.out 2> nohup.err < /dev/null & react-scripts start"
    },
    "eslintConfig": {
        "extends": "react-app"
    },
    "dependencies": {
        "awesome-notifications": "^3.0.3",
        "babel-eslint": "^10.0.2",
        "body-parser": "^1.19.0",
        "bootstrap": "^4.3.1",
        "console-stamp": "^0.2.9",
        "cookie-parser": "~1.4.3",
        "cors": "^2.8.5",
        "debug": "~2.6.9",
        "eslint": "^6.0.1",
        "eslint-config-react-app": "^4.0.1",
        "eslint-loader": "^2.2.1",
        "eslint-plugin-flowtype": "^3.11.1",
        "eslint-plugin-import": "^2.18.0",
        "eslint-plugin-jsx-a11y": "^6.2.3",
        "eslint-plugin-react": "^7.14.2",
        "express": "^4.17.1",
        "express-session": "^1.16.2",
        "fbemitter": "^2.1.1",
        "font-awesome": "^4.7.0",
        "http-errors": "~1.6.2",
        "i18next": "^19.0.1",
        "i18next-browser-languagedetector": "^4.0.1",
        "i18next-xhr-backend": "^3.2.2",
        "moment": "^2.24.0",
        "morgan": "^1.9.1",
        "nodemon": "^1.19.1",
        "path": "^0.12.7",
        "pem": "^1.14.2",
        "prop-types": "^15.7.2",
        "proxy": "^1.0.1",
        "react": "^16.12.0",
        "react-bootstrap": "^1.0.0-beta.12",
        "react-datepicker": "^2.9.6",
        "react-dev-utils": "^9.0.1",
        "react-dom": "^16.12.0",
        "react-flexbox-grid": "^2.1.2",
        "react-hooks-paginator": "^0.4.0",
        "react-i18next": "^9.0.10",
        "react-iframe": "^1.8.0",
        "react-js-pagination": "^3.0.2",
        "react-notifications-component": "^2.0.7",
        "react-redux": "^7.1.1",
        "react-router": "^5.0.1",
        "react-router-dom": "^5.0.1",
        "react-router-redux": "^4.0.8",
        "react-scripts": "^3.3.1",
        "react-select": "^3.0.8",
        "react-spinners": "^0.6.1",
        "react-switch": "^5.0.1",
        "react-table": "^6.10.0",
        "react-toastify": "^5.4.1",
        "reactstrap": "^8.4.0",
        "redux": "^4.0.4",
        "redux-saga": "^1.1.1",
        "request": "^2.88.2",
        "simple-react-validator": "^1.2.2",
        "socket.io": "^2.2.0",
        "underscore": "^1.9.2"
    },
    "devDependencies": {
        "babel-cli": "^6.26.0",
        "babel-core": "^6.26.3",
        "babel-loader": "^7.1.5",
        "babel-plugin-transform-class-properties": "^6.24.1",
        "babel-plugin-transform-object-rest-spread": "^6.26.0",
        "babel-plugin-transform-runtime": "^6.23.0",
        "babel-preset-env": "^1.7.0",
        "babel-preset-es2015": "^6.24.1",
        "babel-preset-react": "^6.24.1",
        "babel-preset-stage-0": "^6.24.1",
        "braintree-web": "^3.58.0",
        "css-loader": "^3.2.0",
        "eslint": "^6.5.0",
        "eslint-config-prettier": "^6.3.0",
        "eslint-config-react-app": "^4.0.1",
        "eslint-loader": "^2.2.1",
        "eslint-plugin-flowtype": "^3.11.1",
        "eslint-plugin-import": "^2.18.2",
        "eslint-plugin-jsx-a11y": "^6.2.3",
        "eslint-plugin-prettier": "^3.1.0",
        "eslint-plugin-react": "^7.14.3",
        "eslint-plugin-react-hooks": "^1.7.0",
        "extract-text-webpack-plugin": "^3.0.2",
        "file-loader": "^4.3.0",
        "html-webpack-plugin": "^3.2.0",
        "jest": "^24.8.0",
        "mini-css-extract-plugin": "^0.7.0",
        "node-sass": "^4.13.1",
        "paypal-checkout": "^4.0.311",
        "prettier": "^1.18.2",
        "puppeteer": "^1.17.0",
        "rimraf": "^2.7.1",
        "sass-loader": "^7.1.0",
        "url-loader": "^2.0.0",
        "webpack": "^4.34.0",
        "webpack-cli": "^3.3.6",
        "webpack-dev-server": "^3.7.1"
    },
    "nodemonConfig": {
        "ext": "js, html, scss",
        "ignore": [
            "node_modules/*",
            "build/*",
            "dist/*",
            "scripts/*",
            ".git"
        ],
        "exec": "sh ./scripts/build-watch.sh"
    }
}

操作系统和终端:

Windows10,gitbash

尝试过的方法:

1) npm 安装

2) npm 安装 --save-dev

3) 删除了 node_modules 文件夹再次尝试 npm install

4) 删除了 package-lock.json, node_modules 文件夹并再次尝试 npm install

5) 检查特定内容是否存在于 node_modules 中,它存在。

6) 使用 git-bash 终端,尝试切换到 cygwin 终端。

7) 与使用 Windows 一样,尝试重新启动机器。 (对不起,如果它伤害了你:( )

8) 已验证文件夹结构,没问题。

注:

代码库在讨论 pull 之前工作正常,在 pull 之后它产生了问题,但即使在 pull 之后它对其他团队成员也完全正常工作。

我在 package.json 中没有看到 braintree,它在你的团队成员的电脑上运行,因为他们可能单独安装了它。有时我在开发功能时往往会忘记将它添加到 package.json,因为它需要试验一堆包,所以包已经在我的 node_modules 文件夹中。也有可能有人忘记 git add package.json.

无论如何,要添加到您的 package.json 做并推送,

npm i braintree --save

并在git add package.json

之后推送