Angular v6项目安装bcryptjs后启动崩溃,求兼容安装方案
问题描述
我在Angular v6版本的项目中安装了bcryptjs,安装操作成功完成,但执行ng serve启动开发环境时项目崩溃。目前只有使用旧的node_modules才能正常运行项目。项目会在部署新变更后进行升级,请问有没有办法在不破坏现有node_modules的前提下安装新包?
附上我的package.json文件:
{ "name": "@coreui/coreui-free-angular-admin-template", "version": "2.0.0-beta.5", "description": "CoreUI Free Angular 2+ Admin Template", "author": { "name": "Łukasz Holeczek", "url": "http://holeczek.pl", "github": "https://github.com/mrholek", "twitter": "https://twitter.com/lukaszholeczek" }, "contributors": [ { "name": "Andrzej Kopański", "url": "https://github.com/xidedix" } ], "homepage": "https://coreui.io/angular", "copyright": "Copyright 2018 creativeLabs Łukasz Holeczek", "license": "MIT", "scripts": { "ng": "ng", "start": "ng serve", "build": "ng build --prod", "test": "ng test", "lint": "ng lint", "e2e": "ng e2e" }, "private": true, "dependencies": { "@angular/animations": "^6.1.10", "@angular/common": "6.0.2", "@angular/compiler": "6.0.2", "@angular/core": "6.0.2", "@angular/forms": "6.0.2", "@angular/http": "6.0.2", "@angular/platform-browser": "6.0.2", "@angular/platform-browser-dynamic": "6.0.2", "@angular/router": "6.0.2", "@coreui/angular": "^2.13.1", "@coreui/coreui": "^2.1.16", "@coreui/coreui-plugin-chartjs-custom-tooltips": "^1.3.1", "@coreui/icons": "^0.1.1", "@ng-bootstrap/ng-bootstrap": "^2.2.2", "@ngx-loading-bar/core": "^2.0.0", "@ngx-loading-bar/http": "^2.0.0", "@ngx-loading-bar/http-client": "^2.0.0", "@ngx-loading-bar/router": "^2.0.0", "@ngx-translate/core": "^10.0.2", "@ngx-translate/http-loader": "^3.0.1", "@types/googlemaps": "^3.43.3", "@types/moment": "^2.13.0", "ag-grid-angular": "^23.0.3", "ag-grid-community": "^23.2.1", "angular-gtag": "^1.0.3", "angular-highcharts": "^10.0.1", "angular-material-fileupload": "0.0.11", "angular2-cookie": "^1.2.6", "angular2-spinner": "^1.0.10", "bcryptjs": "^2.4.3", "chart.js": "2.7.2", "chartjs-plugin-datalabels": "^0.4.0", "core-js": "2.5.6", "crypto-js": "^3.1.9-1", "file-saver": "^2.0.2", "flag-icon-css": "3.0.0", "font-awesome": "^4.7.0", "hammerjs": "^2.0.8", "highcharts": "^6.2.0", "moment": "^2.29.3", "mutationobserver-shim": "^0.3.2", "ng-image-slider": "^1.3.7", "ng2-charts": "1.6.0", "ngx-bootstrap": "2.0.5", "ngx-custom-validators": "^8.0.0", "ngx-perfect-scrollbar": "6.0.0", "ngx-select-dropdown": "^0.4.1", "ngx-toastr": "^8.7.3", "rxjs": "6.1.0", "rxjs-compat": "6.1.0", "simple-line-icons": "^2.4.1", "ts-helpers": "1.1.2", "xlsx": "^0.15.3", "zone.js": "0.8.26" }, "devDependencies": { "@angular-devkit/build-angular": "^0.6.8", "@angular/cli": "^6.0.8", "@angular/compiler-cli": "6.0.2", "@angular/language-service": "6.0.2", "@types/crypto-js": "^3.1.47", "@types/jasmine": "2.8.7", "@types/jasminewd2": "2.0.3", "@types/node": "10.1.0", "codelyzer": "4.3.0", "jasmine-core": "3.1.0", "jasmine-spec-reporter": "4.2.1", "karma": "2.0.2", "karma-chrome-launcher": "2.2.0", "karma-coverage-istanbul-reporter": "1.4.2", "karma-jasmine": "1.1.2", "karma-jasmine-html-reporter": "1.1.0", "protractor": "5.3.2", "ts-node": "6.0.3", "tslint": "5.10.0", "typescript": "2.7.2" }, "engines": { "node": ">= 8.9.4", "npm": ">= 5.6.0" } }
解决方案
方法1:手动复制依赖包(临时稳妥方案)
- 先备份当前正常的
node_modules文件夹,重命名为node_modules_backup - 执行
npm install bcryptjs --no-save,该命令会将bcryptjs安装到当前node_modules但不会修改package.json - 找到安装后的
node_modules/bcryptjs文件夹,复制到node_modules_backup目录下 - 删除当前的
node_modules,将node_modules_backup改回node_modules - 此方法既保留原有稳定依赖,又添加了bcryptjs,
package.json中已有的bcryptjs依赖可保留,待项目升级后再正常安装
方法2:忽略peer依赖冲突安装
你的Angular v6版本较旧,安装bcryptjs时可能触发了依赖树更新,导致其他包版本不兼容。可尝试:
- 备份
node_modules和package-lock.json文件 - 执行
npm install bcryptjs --legacy-peer-deps,该参数会忽略peer依赖冲突,避免修改已安装的其他包 - 执行
ng serve测试,如果项目正常运行则保留;若仍崩溃,恢复备份的文件即可
方法3:隔离环境安装后复制
- 创建临时文件夹并初始化npm项目:
mkdir temp-bcrypt && cd temp-bcrypt && npm init -y - 在临时项目中安装对应版本的bcryptjs:
npm install bcryptjs@2.4.3 - 将临时项目
node_modules中的bcryptjs文件夹复制到原项目的node_modules中 - 确保原项目
package.json已添加bcryptjs依赖(你已完成此操作),后续项目升级时可正常处理依赖
额外排查建议
执行ng serve时查看终端错误日志,通常崩溃是因为特定依赖版本不兼容。比如安装bcryptjs时npm自动更新了@types/node或其他工具包,导致与Angular v6冲突。若能定位到冲突包,可在package.json中锁定该包版本,再重新安装。
内容的提问来源于stack exchange,提问作者Hammad Ahmed Khan
相关产品推荐
相关产品推荐

