Как я могу гарантировать, что получу те же пакеты npm?

#node.js #npm #package.json

Вопрос:

Итак, у меня есть приложение, тесты которого не проходят. Гипотеза состоит в том, что машина, на которую я ее клонировал, имела другую версию node, поэтому я изменил версию node/npm на версию, равную машине, на которой проходят тесты Мокко. Я предполагал, что это загрузит те же самые пакеты, что и исходная машина, но это не так, даже когда я удаляю каретку на номерах версий пакетов и даже если я это сделаю rm -rf node_modules .

Как мне убедиться, что у меня одинаковые пакеты? Включая пакеты, которые зависят от пакетов в package.json файле.

Провалившийся тест-это следующий:

 the error is:  expected 400 to equal 201
      1) should create and get notes for a patient? /api/v2/patients/:patientId/notes


  27 passing (3s)
  1 pending
  1 failing

  1) Testing patients end points.
       given an user
         should create and get notes for a patient? /api/v2/patients/:patientId/notes:
     Error: Internal server error: expected 400 to equal 201
      at Object.<anonymous> (test/testutils/auth.utils.ts:226:11)
      at Generator.next (<anonymous>)
      at fulfilled (test/testutils/auth.utils.ts:5:58)
      at runMicrotasks (<anonymous>)
      at processTicksAndRejections (node:internal/process/task_queues:96:5)
 

Что, я полагаю, относится к этому методу:

 export async function createPatientNote(
  tokenObjectDto: TokenObjectDto,
  patientPui: string,
  noteText: string,
  isPublic: boolean,
  noteType: NoteType,
  visibleAfter?: Date,
  title?: string
): Promise<ViewNoteDto> {
  
  const urlPath = p().api.v2.patients.$patientId.notes.$url.replace(':patientId', patientPui)
  
  const newNoteDto = new NewNoteDto(
    patientPui,
    noteType,
    noteText,
    !isPublic,
    visibleAfter,
    title,
    [
      new class implements ITag {
        key = 'Test';
        value = `createPatientNode for ${patientPui}`;
      }
    ]
  )
  
  const res = await request(app)
    .post(urlPath)
    .set('Authorization', 'Bearer '   tokenObjectDto.token)
    .send(newNoteDto);
    
  expect(res.status).to.equal(StatusCodes.CREATED);
  
  const viewNoteDto = res.body
  
  expect(viewNoteDto.pui).equal(patientPui)
  
  return viewNoteDto
}
 

Это package-lock.json файл:
https://gist.github.com/ldco2016/3bb682442b6d16976f8ffbd4ec53809d

Похоже, он выдает ошибку до или при попытке выполнить urlPath .

Комментарии:

1. Для этого и предназначен файл package-lock.json. Используйте его npm ci для получения повторяемых установок

2. Интересная ситуация… Я думаю, что вашему вопросу было бы полезно немного объяснить, почему вам абсолютно, на 1000%, нужны точно соответствующие версии пакетов (кроме основных выпусков и некомпетентных сопровождающих), и какие тесты конкретно не работают из-за несоответствующих версий пакетов. Минимальные версии все хороши и хороши, но пакеты должны быть модульными по многим причинам (совместимость, исправления/исправления безопасности и другие). Я бы согласился с комментарием @Joe о том, что вы, возможно, захотите сосредоточиться на целостности package-lock.json versus package.json .

3. @Джо, так что мне нужно получить package-lock.json файл с другими машинами.

4. Для приложения это, как правило, файл, который вы хотите сохранить в системе управления версиями вместе с кодом. Это позволяет повторять установки с течением времени.

5. @Джо, я клонировал проект, и package-lock.json файл не был включен