我正在為我的專案使用 NX 單聲道存盤庫。它包含以下三個應用程式:
- 一個網路應用程式(NextJS),
- API 服務 (NestJS)
- 移動應用程式(React Native)
我試圖將后端代碼部署到 Heroku,當我將 NODE_ENV 變數設定為生產時,我遇到了它找不到包的問題。默認情況下,所有 NX 包都存盤為開發依賴項。如果我將 NODE_ENV 設定為開發,它作業正常。
問題:解決問題的理想方法是什么?我不想將 NODE_ENV 設定為開發,否則,它會通過從 devDependencies 安裝無用的包來減慢部署速度。
任何幫助將不勝感激。
這就是我的 package.json 的樣子。
"scripts": {
"api": "nx serve api",
"build:api": "nx build api",
"api:prod": "node dist/apps/api/main.js",
},
"dependencies": {
"@emotion/react": "^11.10.4",
"@emotion/styled": "^11.10.4",
"@hookform/resolvers": "^2.9.7",
"@mui/icons-material": "^5.10.3",
"@mui/material": "^5.10.4",
"@nestjs/common": "^9.0.0",
"@nestjs/config": "^2.2.0",
"@nestjs/core": "^9.0.0",
"@nestjs/jwt": "^9.0.0",
"@nestjs/mongoose": "^9.2.0",
"@nestjs/passport": "^9.0.0",
"@nestjs/platform-express": "^9.0.0",
"@react-native-community/clipboard": "^1.5.1",
"@react-navigation/bottom-tabs": "^6.3.3",
"@react-navigation/material-top-tabs": "^6.2.4",
"@react-navigation/native": "^6.0.11",
"@react-navigation/native-stack": "^6.7.0",
"@react-three/drei": "^9.34.3",
"@react-three/fiber": "^8.8.9",
"@tanstack/react-query": "^4.2.3",
"@trycourier/courier": "^3.15.0",
"@twotalltotems/react-native-otp-input": "^1.3.11",
"axios": "^0.27.2",
"bcryptjs": "^2.4.3",
"class-transformer": "^0.5.1",
"class-validator": "^0.13.2",
"cookies": "^0.8.0",
"core-js": "^3.6.5",
"http-proxy": "^1.18.1",
"jwt-decode": "^3.1.2",
"lodash": "^4.17.21",
"material-ui-phone-number": "^3.0.0",
"mongoose": "^6.5.2",
"mui-tel-input": "^2.0.1",
"native-base": "^3.4.13",
"next": "12.2.3",
"npm": "^8.19.2",
"passport": "^0.6.0",
"passport-jwt": "^4.0.0",
"passport-local": "^1.0.0",
"patch-package": "^6.4.7",
"react": "18.2.0",
"react-dom": "18.2.0",
"react-hook-form": "^7.34.2",
"react-is": "18.2.0",
"react-native": "0.69.3",
"react-native-gesture-handler": "^2.6.0",
"react-native-pager-view": "^6.0.1",
"react-native-phone-number-input": "^2.1.0",
"react-native-reanimated": "^2.10.0",
"react-native-safe-area-context": "^4.3.1",
"react-native-screens": "^3.15.0",
"react-native-snackbar": "^2.4.0",
"react-native-tab-view": "^3.2.1",
"react-native-vector-icons": "^9.2.0",
"react-native-webview": "^11.23.1",
"react-otp-input": "^2.4.0",
"reflect-metadata": "^0.1.13",
"regenerator-runtime": "0.13.7",
"rxjs": "^7.0.0",
"styled-components": "5.3.5",
"three": "^0.145.0",
"tslib": "^2.3.0",
"twilio": "^3.81.0",
"yup": "^0.32.11"
},
"devDependencies": {
"@commitlint/cli": "^17.0.3",
"@commitlint/config-conventional": "^17.0.3",
"@nestjs/schematics": "^9.0.0",
"@nestjs/testing": "^9.0.0",
"@nrwl/cli": "14.5.4",
"@nrwl/cypress": "14.5.4",
"@nrwl/detox": "14.5.6",
"@nrwl/eslint-plugin-nx": "14.5.4",
"@nrwl/jest": "14.5.4",
"@nrwl/linter": "14.5.4",
"@nrwl/nest": "14.5.4",
"@nrwl/next": "^14.5.4",
"@nrwl/node": "14.5.4",
"@nrwl/react": "14.5.4",
"@nrwl/react-native": "^14.5.6",
"@nrwl/web": "14.5.4",
"@nrwl/workspace": "14.5.4",
"@react-native-async-storage/async-storage": "1.17.7",
"@react-native-community/cli": "8.0.4",
"@react-native-community/cli-platform-android": "8.0.4",
"@react-native-community/cli-platform-ios": "8.0.4",
"@testing-library/dom": "^8.18.1",
"@testing-library/jest-dom": "5.16.4",
"@testing-library/jest-native": "4.0.5",
"@testing-library/react": "13.3.0",
"@testing-library/react-native": "11.0.0",
"@testing-library/user-event": "^14.4.3",
"@types/bcryptjs": "^2.4.2",
"@types/cookies": "^0.7.7",
"@types/jest": "27.4.1",
"@types/lodash": "^4.14.182",
"@types/node": "16.11.7",
"@types/passport-jwt": "^3.0.6",
"@types/passport-local": "^1.0.34",
"@types/react": "18.0.15",
"@types/react-dom": "18.0.6",
"@types/react-is": "17.0.3",
"@types/react-native": "0.69.3",
"@types/react-native-vector-icons": "^6.4.12",
"@types/styled-components": "5.1.25",
"@types/three": "^0.144.0",
"@typescript-eslint/eslint-plugin": "^5.29.0",
"@typescript-eslint/parser": "^5.29.0",
"babel-jest": "27.5.1",
"babel-plugin-styled-components": "1.10.7",
"cypress": "^10.2.0",
"detox": "19.7.1",
"eslint": "~8.15.0",
"eslint-config-next": "12.2.3",
"eslint-config-prettier": "8.1.0",
"eslint-plugin-cypress": "^2.10.3",
"eslint-plugin-import": "2.26.0",
"eslint-plugin-jsx-a11y": "6.6.1",
"eslint-plugin-react": "7.30.1",
"eslint-plugin-react-hooks": "4.6.0",
"husky": "^8.0.0",
"jest": "27.5.1",
"jest-circus": "27.5.1",
"jest-react-native": "18.0.0",
"lint-staged": "^13.0.3",
"metro": "0.71.3",
"metro-babel-register": "0.71.3",
"metro-react-native-babel-preset": "0.71.3",
"metro-resolver": "0.71.3",
"msw": "^0.47.2",
"nx": "14.5.4",
"prettier": "^2.6.2",
"prettier-plugin-organize-imports": "^3.1.0",
"react-devtools": "^4.26.0",
"react-native-config": "1.4.6",
"react-native-svg": "12.4.3",
"react-native-svg-transformer": "1.0.0",
"react-test-renderer": "18.2.0",
"ts-jest": "27.1.4",
"ts-node": "~10.8.0",
"typescript": "~4.7.2"
},
這是我的 Procfile:
web: yarn build:api && yarn api:prod
uj5u.com熱心網友回復:
Nx 安裝為devDependency. HerokudevDependencies在該build步驟之后進行清理,這樣您的最終環境就沒有額外的依賴關系。你應該做的是有一個build腳本package.json來構建你的服務器需要啟動的所有東西,然后有一個start腳本來啟動應用程式,或者web像Procfile你目前對build:api && api:prod. 但是,此啟動腳本不應依賴任何 devDependencies. 它應該能夠僅使用生產依賴項運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/518106.html
