组件发布新版本至线上

项目环境 vue 2

1. 在 build 文件夹下新建文件  npm-auth.js 内容如下:

const registry = '' // 要发布的线上地址
const alwaysAuth = true

function getNpmAuth (username, password) {
  const userStr = `${username}:${password}`
  const _auth = Buffer.from(userStr).toString('base64')

  const npmAuth =
`registry=${registry}
always-auth=${alwaysAuth}
_auth="${_auth}"`

  return npmAuth
}

module.exports = getNpmAuth

2. 在 build 文件夹下新建文件 publish.js 内容如下:

const fs = require('fs')
const exec = require('child_process').exec;
var initData, publishData;
var execute = function (cmd) {
  exec(cmd, function (error) {
    if (error) {
      console.error(error);
    } else {
      console.log('success');
    }
  });
}
// 读取package.json
fs.readFile('../package.json', function (err, data) {
  if (err) {
    return console.error(err);
  }
  initData = JSON.parse(data).dependencies
});

fs.readFile('./package.json', function (err, data) {
  if (err) {
    return console.error(err);
  }
  // 读取版本号
  publishData = JSON.parse(data)
  let version = publishData.version
  let arr = []
  for (let i of version.split('.')) {
    arr.push(parseInt(i))
  }
  let [a, b, c] = arr
  if (c + 1 >= 100) {
    c = 0
    b++
    if (b >= 100) {
      a++
      b = 0
    }
  } else {
    c++
  }
  let newVersion = `${a}.${b}.${c}`
  publishData.version = newVersion
  Object.assign(publishData.dependencies, initData)
  fs.writeFile('./package.json', JSON.stringify(publishData), err => {
    if (err) throw err;
    console.log('写入成功');
    execute('npm config set registry http:///nexus/repository') // 此处替换发布地址
    execute('npm publish')
  })
});

3. 在 build 文件夹下新建文件 publishNew.js 内容如下:

/**
 * 组件发布执行命令
 * node build/publishNew.js
 */
const fs = require('fs')
const path = require('path')

const inquirer = require('inquirer')
const shelljs = require('shelljs')

const packageName = 'my-app'

const promptList = [
  {
    type: 'input',
    message: '账号: ',
    name: 'username'
  },
  {
    type: 'password',
    message: '密码: ',
    name: 'password'
  }
]

function resolve (dir) {
  return path.join(__dirname, '..', dir)
}

function rewriteNpmrc ({ username, password }) {
  const npmAuth = require('./npm-auth.js')(username, password)
  fs.writeFileSync(resolve(`/${packageName}/.npmrc`), npmAuth)
}


const copyFileList = [
  {
    from: resolve(`/${packageName}/.npmrc`),
    to: resolve(`/${packageName}/lib/.npmrc`)
  }
]

function moveFile () {
  copyFileList.forEach(item => {
    const content = fs.readFileSync(item.from, 'utf-8')
    fs.writeFileSync(item.to, content)
  })
}

function publishNpm () {
  shelljs.cd(resolve(`/${packageName}/`))
  shelljs.exec('npm publish')
}

inquirer.prompt(promptList)
  .then(answers => {
    rewriteNpmrc(answers)
    moveFile()
    publishNpm()
  })

4. 构建产物

npm run build

构建后文件目录如图所示:

 5. package.json 修改版本号

 6. 发布产物 (会出现交互,输入有权限上传的账号密码)

node build/publishNew.js

7. 其他

若发布失败,可能是当前版本已存在。

也可构建后,直接上传到制品库

posted @ 2023-08-28 10:31  Amnesia_999  阅读(4)  评论(0编辑  收藏  举报