正如标题所示,我正在尝试将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,真的有点不知道如何进一步解决这个问题。会欣赏任何想法!
1条答案
按热度按时间2ul0zpep1#
我尝试使用pm2模块部署Express.js应用程序,并成功地在Azure Web应用程序中使用Node 18部署和运行。
我引用了这个Quickstart,另外我添加了下面的命令来安装pm2作为节点模块。
我的节点模块依赖:-
My Express应用程序目录结构:-
我将上面的代码推送到我的github仓库中,并运行了如下的github动作工作流:
选择Deployment> Deployment Center>添加了我的github存储库,其中包含我的express应用代码并开始部署:-
你可以在这里找到我完整的工作流程代码**。
我的github Action工作流运行成功:-
***我编辑了启动命令来运行pm2,pm2成功启动,***参考如下:-