查看package.json,将版本添加到包中

问题描述 投票:0回答:1

我正在将一个库与 rollup 捆绑在一起,并尝试将 package.json 中的版本添加到代码本身中。

汇总配置的相关部分:

import pkg from './package.json'

output: [{
  footer: `foo.version = '${pkg.version}'`
}]

问题是,它没有通过热重载/观看进行更新。 (rollup -w -c rollup.development.config.js')

尝试了一些事情:

  • 使用输出插件:它们不会在手表上再次运行
  • 在页脚中进行动态导入:也不再运行
  • 自定义观察器插件包含 package.json:这会触发重新加载,但仍然不运行读取更新值(插件或页脚)的代码

有办法做到这一点吗?我不介意在 package.json 更改时进行完全重建,但我想避免手动重新启动该过程。坦白说,我很困惑这么简单的事情怎么会这么复杂。 谢谢

编辑: 即使我这样做,版本也没有更新:

const getVersion = () => ({
  async renderStart () {
    const data = await import('./package.json')
    console.log('version: ' + data.version)
  }
})

export default async () => ({
  output: [{
    plugins: [getVersion()]
  }]
})

认为它是一个缓存,所以我尝试使用 ?date=' + Date.now() 使其无效,但这只会给我错误:找不到模块'./package.json?test=1652969298057'。似乎 rollup 正在使用 require :(

rollup
1个回答
1
投票

弄清楚了:

rollup.config.js

import glob from 'glob'
import path from 'path'
import fs from 'fs'

const watcher = (globs) => ({
  buildStart () {
    for (const item of globs) {
      glob.sync(path.resolve(item)).forEach((filename) => { this.addWatchFile(filename) })
    }
  }
})

const updateVersion = () => ({
  renderStart (outputOptions, inputOptions) {
    outputOptions.footer = () => `library.version = ' + ${JSON.parse(fs.readFileSync('package.json', 'utf8')).version}'`
  }
})

export default {
  plugins: [
    watcher(['package.json'])
  ],
  output: [{
    plugins: [
      updateVersion()
    ]
  }]
}
© www.soinside.com 2019 - 2024. All rights reserved.