在Debian 11上使用serve部署React应用会在gitlab上的CI/CD Pipeline中抛出无法解释的错



下面是我们用来将App部署到Debian服务器的管道:

stages:   
- deploy
deploy-job:      # This job runs in the deploy stage.
stage: deploy  # It only runs when *both* jobs in the test stage complete successfully.
environment: production
image: node:latest  
before_script:
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- ssh-add <(echo "$SSH_PRIVATE_KEY")
- mkdir ~/.ssh
- chmod 700 ~/.ssh
- echo "$SSH_SERVER_HOSTKEYS" > ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts

script:
- echo "Deploying application..."
- ssh $SSH_USER@$SSH_IP "cd $PROEJCT_PATH/$PROJECT_DIRECTORY_NAME && serve -s build"
- echo "Application successfully deployed."

但是这会抛出以下错误消息:

file:///usr/local/lib/node_modules/serve/build/main.js:169
const ipAddress = request.socket.remoteAddress?.replace("::ffff:", ")?? "unknown";^SyntaxError:意外的token '。' at Loader.moduleStrategy(内部/modules/esm/translator .js:133:18(内部/模块/esm/module_job.js: 42:21)

我们在Debian服务器上安装node后也遇到了同样的问题,但在使用nvm install 19.4.0更新后它修复了这个问题

命令serve -s build在服务器上工作,但在管道中不起作用。

我们正在讨论容器正在使用自己的环境的可能性,但我们不确定这种假设。

我能帮你解释一下这个问题吗?

错误来自于"new"optional chainingjavascript特性?.从v14开始支持。然而默认的debian 11节点版本是v12。因此,您应该将节点更新到最新版本

sudo apt remove node npm nodejs#删除旧节点/npm
sudo snap install node --classic#参见https://snapcraft.io/node

或使用nvm代替你所做的;安装特定节点版本

最新更新