Devo salvar a versão no Gemfile/package.json?
tl;dr
Não, a menos que alguma atualização quebre o seu sistema. O Gemfile.lock/yarn.lock serve para isso.
Para responder a essa pergunta eu vou tentar causar o problema que não armazenar a versão no Gemfile/package.json pode causar.
Gemfile e Bundle
Vamos supor que eu tenha esse Gemfile:
source "https://rubygems.org"
gem "sinatra", "1.0.0"
E esse Gemfile.lock:
GEM
remote: https://rubygems.org/
specs:
rack (2.0.6)
sinatra (1.0)
rack (>= 1.0)
PLATFORMS
ruby
DEPENDENCIES
sinatra (= 1.0.0)
BUNDLED WITH
1.16.3
Agora eu vou desinstalar todas as gems, remover a trava (= 1.0.0) do Gemfile, e rodar bundle install.
Adivinha só!? A mesma versão 1.0.0 do sinatra foi instalado.
package.json and npm
Vamos supor que eu tenha esse package.json:
{
"name": "app",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "= 3.0.0"
}
}
E esse package-lock.json.
Agora vou fazer o mesmo: remover node_modules, remover a trava (substituir = 3.0.0 por *) e rodar npm install novamente.
Bazinga! npm instalou a versão 3.0.0 novamente!
package.json and yarn
Vamos dizer que eu tenha esse package.json (o mesmo de antes):
{
"name": "app",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "= 3.0.0"
}
}
E esse yarn.lock.
Vou fazer o mesmo: remover o node_modules, remover a trava (substituir = 3.0.0 por *), e rodar yarn install novamente.
💥 BOOM!!! Quebrou. O yarn instala a última versão mesmo que exista o yarn.lock.
Bom, eu não sei você, mas se uma funcionalidade está em 2 (de um total de 3) gerenciadores de pacotes essa funcionalidade parece certa para mim.