如何通过Node CLI结合Package版本号重命名文件?
实现Node CLI读取package.json版本号并重命名文件的方案
嘿,我之前刚好做过类似的需求,这里分享一套可行的实现思路和代码,你可以直接参考或者调整成符合你需求的样子:
核心步骤拆解
- 读取项目根目录下的
package.json文件,提取其中的version字段 - 定位到需要重命名的目标文件/文件夹
- 根据你想要的格式(比如
code_v1.0.2.zip或者code_1.0.2v.zip)拼接新的文件名 - 使用Node.js的
fs模块完成重命名操作
完整代码示例
创建一个rename-with-version.js文件,代码如下:
const fs = require('fs').promises; const path = require('path'); // 配置项:按需修改这里的参数 const CONFIG = { // 目标文件/文件夹的路径 targetPath: './dist/code.zip', // 新文件名的前缀 fileNamePrefix: 'code', // 版本号的格式:可选 'v{version}' 或者 '{version}v' versionFormat: 'v{version}' }; async function renameFileWithVersion() { try { // 1. 读取package.json并获取版本号 const packageJsonPath = path.resolve(__dirname, 'package.json'); const packageJsonContent = await fs.readFile(packageJsonPath, 'utf8'); const { version } = JSON.parse(packageJsonContent); if (!version) { throw new Error('package.json中未找到version字段'); } // 2. 解析目标文件的路径信息 const targetDir = path.dirname(CONFIG.targetPath); const originalExt = path.extname(CONFIG.targetPath); // 如果是文件夹的话,originalExt会是空字符串,这里做兼容 const isDirectory = originalExt === ''; // 3. 拼接新的文件名 const formattedVersion = CONFIG.versionFormat.replace('{version}', version); let newFileName; if (isDirectory) { newFileName = `${CONFIG.fileNamePrefix}_${formattedVersion}`; } else { newFileName = `${CONFIG.fileNamePrefix}_${formattedVersion}${originalExt}`; } const newFilePath = path.join(targetDir, newFileName); // 4. 执行重命名操作 await fs.rename(CONFIG.targetPath, newFilePath); console.log(`✅ 重命名成功:${CONFIG.targetPath} → ${newFilePath}`); } catch (error) { console.error('❌ 重命名失败:', error.message); process.exit(1); } } // 执行函数 renameFileWithVersion();
使用说明
- 将上述代码保存到项目根目录下的
rename-with-version.js - 修改
CONFIG里的参数:targetPath:填写你要重命名的文件/文件夹的相对路径fileNamePrefix:设置文件名的前缀(比如你示例里的code)versionFormat:选择版本号的格式,比如'v{version}'会生成code_v1.0.2.zip,'{version}v'会生成code_1.0.2v.zip
- 在终端执行命令:
node rename-with-version.js
额外优化建议
- 如果需要批量重命名多个文件,可以把
targetPath改成一个数组,然后循环处理每个文件 - 可以添加参数校验,比如检查目标文件是否存在后再执行重命名
- 可以把这个脚本添加到
package.json的scripts里,比如:
之后直接执行"scripts": { "rename": "node rename-with-version.js" }npm run rename就可以了
内容的提问来源于stack exchange,提问作者Nikolay992
相关产品推荐
相关产品推荐

