CircleCI部署至FTP服务器报错:无法找到deploy.js模块
解决CircleCI执行部署脚本时的模块找不到错误
首先,咱们一眼就能揪出问题的核心:你在CircleCI配置里指定要运行的是.circleci/deploy.js,但你的部署脚本实际命名为config.js,这就导致Node.js找不到对应的文件,直接抛出了Cannot find module错误。
第一步:修正CircleCI配置文件
把.circleci/config.yml里的部署命令改成指向正确的脚本文件:
version: 2 jobs: build: docker: - image: circleci/node:latest steps: - checkout - run: npm install # 这里把deploy.js改成config.js,匹配你的实际脚本文件名 - run: node .circleci/config.js - run: echo "WE'RE ONLINE" workflows: version: 2 deploy: jobs: - build: filters: branches: only: - master
第二步:调整部署脚本细节(避免后续踩坑)
你的config.js里还有两个容易出问题的地方,提前修正掉:
- 依赖安装确认:你用到了
ftp-deploy模块,要确保这个包能被正确安装。要么把它添加到项目package.json的dependencies中,要么在CircleCI步骤里显式安装:- run: npm install ftp-deploy - 本地根目录路径错误:当前
localRoot: __dirname + "/"指向的是.circleci/目录,这意味着你只会把这个目录下的文件传到FTP服务器,但你应该是要部署项目根目录的文件吧?修改路径前先引入path模块,调整后的脚本如下:
var FtpDeploy = require('ftp-deploy'); var path = require('path'); // 新增path模块引入 var ftpDeploy = new FtpDeploy(); var config = { username: process.env.USERNAME_HV, password: process.env.PASSWORD_HV, host: process.env.FTPHOST, port: 21, // 修改为项目根目录,确保上传的是你需要的文件 localRoot: path.join(__dirname, '../'), remoteRoot: "/home/hiversho/public_html/gitlab-pipeline-demo/", include: ['*'] } ftpDeploy.deploy(config, function(err) { if (err) console.log(err) else console.log('finished'); });
最后确认
确保你已经在CircleCI的项目环境变量里正确设置了USERNAME_HV、PASSWORD_HV和FTPHOST这三个变量,然后重新触发master分支的构建就可以了。
内容的提问来源于stack exchange,提问作者Saif71
相关产品推荐
相关产品推荐

