如何在GitLab流水线中用npm publish部署Electron打包产物到包仓库
用npm publish替代通用包上传并自定义打包步骤
要实现用npm publish发布electron打包产物并使用npm dist-tag功能,核心是利用npm的生命周期脚本替换默认build步骤,同时调整流水线和package.json配置,具体操作如下:
1. 修改package.json配置
在项目的package.json中添加两个关键配置:
- 绑定打包命令到
prepublishOnly生命周期钩子(仅在npm publish前触发,不会影响npm install) - 配置
files字段确保打包产物被包含在npm包中
{ "scripts": { // 保留原有脚本... "prepublishOnly": "npm run package:windows" }, "files": [ "electron-dist/**/*" ], // 可选:如果需要将exe作为全局可执行命令,添加bin字段 "bin": "./electron-dist/moniteur-virtuel.exe" }
2. 调整GitLab流水线步骤
修改原流水线脚本,移除通用包上传的Invoke-RestMethod步骤,替换为版本号修改、npm publish和标签设置:
- nvm use 18.20.3 - $Version = node -p "require('./package.json').version" - $FullVersion = $Version + $BETA_RELEASE_TAG - $FullFileName = 'moniteur-virtuel.setup.' + $Version + '.exe' - $FullFilePath = (Get-Location).Path + '\electron-dist\' + $FullFileName - (Get-Content .\src\polyfills.auto.ts) | Set-Content .\src\polyfills.ts - npm run update-scope # met a jour le package-lock.json - npm install - npm run list-scope # list les versions utilises # 更新package.json中的版本号为带beta标签的完整版本 - (Get-Content .\package.json) | ForEach-Object { $_ -replace '"version": "' + $Version + '"', '"version": "' + $FullVersion + '"' } | Set-Content .\package.json # 配置npm仓库权限 - if (Test-Path .npmrc) { Remove-Item .npmrc; } - echo "strict-ssl = false" > .npmrc - echo "@cossilys:registry=https://${CI_SERVER_HOST}/api/v4/projects/${CI_PROJECT_ID}/packages/npm/" >> .npmrc - echo "//${CI_SERVER_HOST}/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authToken=${CI_JOB_TOKEN}" >> .npmrc - cat .npmrc # 执行npm publish,自动触发prepublishOnly中的打包命令 - npm publish --access public # 私有包可省略--access public参数 # 为发布版本添加自定义dist-tag - npm dist-tag add @cossilys/moniteur-virtuel@$FullVersion $FullVersion
关键说明
prepublishOnly是npm官方推荐的发布前钩子,只会在执行npm publish时触发,避免了prepare钩子在npm install时也执行打包的问题。- 必须更新package.json的version字段为
$FullVersion,因为npm publish完全依赖该字段确定发布版本,否则标签与版本会不匹配。 files字段是确保electron打包生成的exe文件被包含在发布包中的关键,若有其他需要发布的文件,可追加到数组中。
内容的提问来源于stack exchange,提问作者User.Anonymous
相关产品推荐
相关产品推荐

