在包含多个包的 repo 中,每个包的版本应该代表什么?

In a repo containing multiple packages, what should the version of each represent?

我正在开发一个 Web 应用程序,React client 应用程序和 Node Express server API 位于同一个存储库中,但具有单独的 package.json 文件。结构如下:

root
-client/
  --src/     
  --package.json  // manages create-react-app dependencies, scripts
-controllers/
-models/
-routes/
-app.js
-package.json // manages node express server dependencies, scripts

从表面上看,这些单独的包是系统(即 Web 应用程序)的子模块。例如,考虑路由的处理方式,其中服务器无法识别的任何请求都由 client 路由器处理:

// app.js

require('./routes/...')(app)      // api routes defined first

if (process.env.NODE_ENV === 'production') {
  app.use(express.static('client/build'))
  const path = require('path')
  app.get('*', (req, res) => {   // non match fall through to client
    res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'))
  })
}

服务器 API 没有启用 cors。

这些 package.json 文件应该共享相同的版本,还是单独版本化?

每个包都应该单独进行版本控制。将它们绑定到相同的版本号意味着一个简单的错误修复,另一个需要无意义的版本升级。不要对您的客户撒谎!包版本号适用于它的内容,并且只适用于它的内容。即使是一个包的包也应该有自己的版本序列。

您也可以选择只运送一个包裹。