运行@semantic-release/npm插件时出现Cannot find module '../lib/cli.js'错误
解决semantic-release更新package.json版本失败问题
问题背景
配置GitHub Action执行semantic-release更新package.json的version字段,但执行失败,错误提示找不到../lib/cli.js模块,已尝试使用最新版本仍无法解决。
GitHub Action配置
semantic-versioning: if: inputs.infra_dir != 'prod' runs-on: ${{ inputs.runs_on }} steps: - name: ⤵️ Checkout repo uses: actions/checkout@v3 - name: "⚙️ Setup Node" uses: actions/setup-node@v3 with: node-version: "16" - name: Action For Semantic Release uses: cycjimmy/semantic-release-action@v3.2.0 with: semantic_version: 19.0.5 branch: "main" extra_plugins: | @semantic-release/changelog@6 @semantic-release/git env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
package.json内容
{ "name": "app", "version": "0.1.0", "release": { "branches": ["master", "main", "SemVer"], "plugins": [ "@semantic-release/commit-analyzer", "@semantic-release/release-notes-generator", ["@semantic-release/npm", { "npmPublish": false } ], [ "@semantic-release/changelog", { "changelogFile": "docs/CHANGELOG.md" } ], [ "@semantic-release/git", { "assets": ["docs/CHANGELOG.md"] } ] ] } }
错误日志
Acquiring 16.18.0 [semantic-release] [@semantic-release/npm] › ℹ Write version 1.1.0 to package.json in /home/ec2-user/actions-runner/_work/test 59 node:internal/modules/cjs/loader:936 60 throw err; 63 Error: Cannot find module '../lib/cli.js' 64 Require stack: 65 - /home/ec2-user/actions-runner/externals.2.299.1/node16/bin/npm 66 at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15) 67 at Function.Module._load (node:internal/modules/cjs/loader:778:27) 68 at Module.require (node:internal/modules/cjs/loader:1005:19) 69 at require (node:internal/modules/cjs/helpers:102:18) 70 at Object.<anonymous> (/home/ec2-user/actions-runner/externals.2.299.1/node16/bin/npm:2:1) 71 at Module._compile (node:internal/modules/cjs/loader:1101:14) 72 at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10) 73 at Module.load (node:internal/modules/cjs/loader:981:32) 74 at Function.Module._load (node:internal/modules/cjs/loader:822:12) 75 at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) { 76 code: 'MODULE_NOT_FOUND', 77 requireStack: [ '/home/ec2-user/actions-runner/externals.2.299.1/node16/bin/npm' ] 78 } 79 [7:07:42 AM] [semantic-release] › ✖ Failed step "prepare" of plugin "@semantic-release/npm" 80 [7:07:42 AM] [semantic-release] › ✖ An error occurred while running semantic-release: Error: Command failed with exit code 1: npm version 1.1.0 --userconfig /tmp/5959228743ee200b6bb8b24654dabd8f/.npmrc --no-git-tag-version --allow-same-version 81 node:internal/modules/cjs/loader:936
解决思路
修复runner的npm环境
错误指向npm核心模块缺失,说明自托管runner上的Node 16.18.0环境可能损坏。在Setup Node步骤后添加npm重装命令,指定对应Node版本的兼容npm版本:- name: 修复npm环境 run: npm install -g npm@8.19.4调整semantic-release插件配置
既然不需要发布npm包,可移除@semantic-release/npm插件,直接让@semantic-release/git管理package.json版本更新。修改package.json的release配置,将package.json加入git插件的资产列表:[ "@semantic-release/git", { "assets": ["docs/CHANGELOG.md", "package.json"] } ]更换runner环境测试
如果使用自托管runner,切换到GitHub托管的ubuntu-latestrunner,验证问题是否由自托管环境配置导致。升级Action及插件版本
将cycjimmy/semantic-release-action升级到最新v4版本,同时使用最新版的semantic-release及相关插件:uses: cycjimmy/semantic-release-action@v4 with: semantic_version: 21.0.7 extra_plugins: | @semantic-release/changelog@6.0.3 @semantic-release/git@10.0.1确保获取完整commit历史
semantic-release需要完整commit历史分析版本,在checkout步骤添加fetch-depth: 0参数:- name: ⤵️ Checkout repo uses: actions/checkout@v3 with: fetch-depth: 0
内容的提问来源于stack exchange,提问作者Lys
相关产品推荐
相关产品推荐

