NodeJS 无法使用pm2在Azure App Service上运行Express应用(找不到CLI)

oxosxuxt  于 2023-06-22  发布在  Node.js
关注(0)|答案(1)|浏览(98)

正如标题所示,我正在尝试将Express API部署到Azure App Services。我正在使用Github操作来做管道(连接到我的master)。我能够在本地完美地运行项目,但是我在npm和yarn run start中都得到了以下错误:

Error: Cannot find module '../lib/binaries/CLI.js'
Require stack:
- /home/site/wwwroot/node_modules/.bin/pm2
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:902:15)
    at Function.Module._load (internal/modules/cjs/loader.js:746:27)
    at Module.require (internal/modules/cjs/loader.js:974:19)
    at require (internal/modules/cjs/helpers.js:101:18)
    at Object.<anonymous> (/home/site/wwwroot/node_modules/.bin/pm2:3:1)
    at Module._compile (internal/modules/cjs/loader.js:1085:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
    at Module.load (internal/modules/cjs/loader.js:950:32)
    at Function.Module._load (internal/modules/cjs/loader.js:790:12)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:75:12) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [ '/home/site/wwwroot/node_modules/.bin/pm2' ]
}

我的Github操作的管道文件看起来像这样(相当标准)。我使用Azure的工具来连接它,结果为我生成了操作yml。我刚刚从下面删除了test命令。

name: Build and deploy Node.js app to Azure Web App - xxx

on:
  push:
    branches:
      - master
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Set up Node.js version
        uses: actions/setup-node@v1
        with:
          node-version: '18.x'

      - name: npm install, build, and test
        run: |
          npm install
          npm run build --if-present

      - name: Upload artifact for deployment job
        uses: actions/upload-artifact@v2
        with:
          name: node-app
          path: .

  deploy:
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: 'Production'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}

    steps:
      - name: Download artifact from build job
        uses: actions/download-artifact@v2
        with:
          name: node-app

      - name: 'Deploy to Azure Web App'
        id: deploy-to-webapp
        uses: azure/webapps-deploy@v2
        with:
          app-name: 'xxx'
          slot-name: 'Production'
          publish-profile: ${{ secrets.xxxB }}
          package: .

我使用这个样板作为我的启动器(顺便说一下,这很棒):https://github.com/hagopj13/node-express-boilerplate.git
这是我的ecosystem.config.json文件(也是标准的):

{
    "apps": [
        {
            "name": "app",
            "script": "src/index.js",
            "instances": 1,
            "autorestart": true,
            "watch": false,
            "time": true,
            "env": {
                "NODE_ENV": "production"
            }
        }
    ]
}

我已经匹配了我的Node环境(都在18.16上)。我还尝试通过Kudu卸载所有模块并删除包锁文件。我试过在Kudu上重新安装pm2。我尝试手动重新安装整个项目。对我来说都不管用。
巧合的是,当我尝试在Kudu上运行npm run dev时,我发现跨env包出现了错误。

internal/modules/cjs/loader.js:905
  throw err;
  ^

Error: Cannot find module '..'
Require stack:
- /home/site/wwwroot/node_modules/.bin/cross-env
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:902:15)
    at Function.Module._load (internal/modules/cjs/loader.js:746:27)
    at Module.require (internal/modules/cjs/loader.js:974:19)
    at require (internal/modules/cjs/helpers.js:101:18)
    at Object.<anonymous> (/home/site/wwwroot/node_modules/.bin/cross-env:3:18)
    at Module._compile (internal/modules/cjs/loader.js:1085:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
    at Module.load (internal/modules/cjs/loader.js:950:32)
    at Function.Module._load (internal/modules/cjs/loader.js:790:12)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:75:12) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [ '/home/site/wwwroot/node_modules/.bin/cross-env' ]
}

我想知道这是否与我的模块路径有关,但我不是Azure的Maven,真的有点不知道如何进一步解决这个问题。会欣赏任何想法!

2ul0zpep

2ul0zpep1#

我尝试使用pm2模块部署Express.js应用程序,并成功地在Azure Web应用程序中使用Node 18部署和运行。
我引用了这个Quickstart,另外我添加了下面的命令来安装pm2作为节点模块。

npm install pm2
    • 我的包json:-**
{
  "name": "myexpressapp7",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www"
  },
  "dependencies": {
    "cookie-parser": "~1.4.4",
    "debug": "~2.6.9",
    "ejs": "~2.6.1",
    "express": "~4.16.1",
    "http-errors": "~1.6.3",
    "morgan": "~1.9.1",
    "pm2": "^5.3.0"
  }
}

我的节点模块依赖:-

My Express应用程序目录结构:-

我将上面的代码推送到我的github仓库中,并运行了如下的github动作工作流:
选择Deployment> Deployment Center>添加了我的github存储库,其中包含我的express应用代码并开始部署:-

    • 我的github工作流程:-**

你可以在这里找到我完整的工作流程代码**。

name: Build and deploy Node.js app to Azure Web App - siliconwebapp23

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Set up Node.js version
        uses: actions/setup-node@v1
        with:
          node-version: '18.x'

      - name: npm install, build, and test
        run: |
          npm install
          npm run build --if-present
          npm run test --if-present
      - name: Upload artifact for deployment job
        uses: actions/upload-artifact@v2
        with:
          name: node-app
          path: .

  deploy:
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: 'Production'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}

    steps:
      - name: Download artifact from build job
        uses: actions/download-artifact@v2
        with:
          name: node-app

      - name: 'Deploy to Azure Web App'
        id: deploy-to-webapp
        uses: azure/webapps-deploy@v2
        with:
          app-name: 'siliconwebapp23'
          slot-name: 'Production'
          publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_F719F8253FCD462281F1983515AB346C }}
          package: .

我的github Action工作流运行成功:-

***我编辑了启动命令来运行pm2,pm2成功启动,***参考如下:-

pm2 start  ./bin/www

相关问题