如何编写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
相关产品推荐
相关产品推荐

