Недавно мне задали вопрос: для чего нужен package-lock.json, я ответил: для того же для чего и npm-shrinkwrap.json - чтобы не было мучительно больно. Вчера обнаружил удивительный диссонанс между версиями 1.8.0 и 1.8.4 модуля gRPC, а именно изменения в процессе создания ошибки, вот от кого никак не ожидал. К примеру, если в версии 1.8.0 ошибка с сообщением 'Invalid name' на сервере предсказуемо превращалась в ошибку в таким же сообщением на клиенте, то в версии 1.8.4 на клиенте то же сообщение об ошибке превращается в '2 UNKNOWN: Invalid name'. WTF?
Для примера я немного изменил код из предыдущего поста на тему обработки ошибок в gRPC:
- server.js:
- client.js:
Почувствуйте разницу:
А что если бы подобный код был в production без package-lock.json?
- server.js:
const grpc = require('grpc') const path = require('path') const root = path.join(__dirname, 'protos') const proto = grpc.load({ root, file: 'test.proto' }) const server = new grpc.Server() server.addService(proto.test.Greeter.service, { hello: (call, cb) => { console.log('req:', call.request) if (call.request.name) { return cb(null, `Hello, ${call.request.name}!`) } cb(new Error('Invalid name')) } }) server.bind('0.0.0.0:50051', grpc.ServerCredentials.createInsecure()) server.start()
- client.js:
const grpc = require('grpc') const path = require('path') const root = path.join(__dirname, 'protos') const proto = grpc.load({ root, file: 'test.proto' }) const client = new proto.test.Greeter('localhost:50051', grpc.credentials.createInsecure()) client.hello({ name: process.argv[2] || '' }, (err, res) => { if (err) { console.log('err message:', err.message) console.log('err entries:', Object.entries(err)) console.log('err:', err) } else { console.log('res:', res) } })
Почувствуйте разницу:
А что если бы подобный код был в production без package-lock.json?
Комментариев нет:
Отправить комментарий
Комментарий будет опубликован после модерации