如何自动迁移NuxtJS生成的dist目录文件至NAS且不清除目标目录原有内容
如何自动迁移NuxtJS生成的dist目录文件至NAS且不清除目标目录原有内容
嘿,我完全懂你手动搬文件的痛苦,而且直接改Nuxt生成目录到NAS还会清掉目标文件夹里的其他内容,确实太坑了!这里有几个实用方案,帮你搞定自动化部署还不碰NAS上的原有文件:
方案一:在package.json里加自定义部署脚本
最简单的思路就是给yarn generate加个后续步骤,用文件同步工具把dist内容复制到NAS,而非直接生成到NAS。推荐用rsync(Linux/macOS自带,多数NAS也支持),它只会同步dist里的内容,不会动目标目录里的其他文件夹(比如你的phpadmin)。
- 打开项目根目录的
package.json,在scripts里新增一行:
"scripts": { "generate": "nuxt generate", "deploy": "yarn generate && rsync -av --delete dist/ /path/to/your/nas/webroot/" }
- 简单解释参数:
-a:归档模式,保留文件权限、时间戳等属性-v:显示同步过程(可选,方便排查问题)--delete:删除NAS目标目录里dist中已不存在的文件(保持同步,不想删旧文件可以去掉)- 注意路径末尾的
/:dist/指复制dist目录内的所有内容,而非dist目录本身;目标路径同理,加斜杠避免把dist文件夹整个塞进webroot。
如果是Windows系统,用robocopy替代rsync即可,脚本改成:
"deploy": "yarn generate && robocopy dist\\ \\\\your-nas-ip\\webroot\\ /E"
/E表示复制所有子目录(包括空目录),完全不会碰NAS上的其他文件。
之后你只要运行yarn deploy,就能自动完成生成+同步的全流程。
方案二:用Nuxt的生成钩子自动触发同步
要是想保留yarn generate的原有命令,不想每次打新脚本名,可以用Nuxt的generate:done钩子,在生成完成后自动执行同步操作。
打开nuxt.config.js,添加hooks配置:
export default { // ...其他配置项 hooks: { 'generate:done': (generator) => { const { execSync } = require('child_process'); // Linux/macOS用rsync同步 execSync('rsync -av --delete dist/ /path/to/your/nas/webroot/'); // Windows替换成robocopy命令 // execSync('robocopy dist\\ \\\\your-nas-ip\\webroot\\ /E'); } } }
这样每次运行yarn generate,生成完成后就会自动把dist内容同步到NAS,完全不用手动干预。
关键注意事项
- 确保NAS的目标目录已经挂载/映射到本地机器(Linux/macOS用
mount挂载共享目录,Windows用「映射网络驱动器」),这样本地命令才能正常访问 - 绝对不要直接把Nuxt的
generate.dir设为NAS路径!因为Nuxt生成前会清空这个目录,会删掉你宝贵的phpadmin等文件,一定要本地生成再同步!
备注:内容来源于stack exchange,提问作者Introser
相关产品推荐
相关产品推荐

