You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Bash脚本在压缩文件时修改依赖导入路径?

实现带依赖路径修改的文件压缩Bash脚本

我来帮你搞定这个需求——你的原脚本在压缩时用了zip -j参数会把文件扁平化到压缩包根目录,原来的../../utils依赖路径自然就失效了。下面是调整后的脚本,既能完成压缩,又能自动修改导入路径:

#!/bin/sh

# 创建临时目录存放修改后的文件,避免改动原代码
TEMP_DIR=$(mktemp -d)
# 确保脚本退出时自动清理临时目录,不留垃圾文件
trap 'rm -rf "$TEMP_DIR"' EXIT

for APP in "${APPS[@]}"
do
  # 切换到目标APP目录,失败就终止脚本避免后续出错
  cd "app/${APP}" || exit 1

  npm install

  # 把需要修改路径的src/js文件复制到临时目录
  cp src/*.js "$TEMP_DIR/"

  # 批量替换依赖路径:将../../utils/改成./(适配压缩后的扁平目录结构)
  # 同时兼容单引号和双引号的导入写法
  sed -i 's/require('\''..\/..\/utils\//require('\''.\//g' "$TEMP_DIR"/*.js
  sed -i 's/require("..\/..\/utils\//require("\.\//g' "$TEMP_DIR"/*.js

  # 压缩node_modules到根目录的test.zip
  zip -r ../../test.zip node_modules

  # 把修改后的js文件加入压缩包(-j参数保持扁平化)
  zip -uj ../../test.zip "$TEMP_DIR"/*.js

  # 切回项目根目录
  cd ../../ || exit 1

  # 压缩utils目录的js文件到压缩包
  zip -uj test.zip app/utils/*.js
done

关键细节说明:

  • 临时目录安全机制:用mktemp -d创建临时目录,配合trap命令在脚本结束时自动删除,完全不会影响你的原代码文件。
  • 路径替换逻辑:通过sed命令批量替换所有导入语句,确保require('../../utils/xxx')变成require('./xxx')——因为压缩后src/*.js和app/utils/*.js都在压缩包根目录,这个路径是完全正确的。
  • 错误防护:在cd命令后加|| exit 1,避免目录切换失败后后续命令在错误路径执行,防止出现意外问题。

如果你的压缩包结构有调整(比如想把utils文件放到utils/子目录),只需要修改sed里的替换目标路径就行,比如改成require('./utils/。

内容的提问来源于stack exchange,提问作者Patrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:48:22