Faits : A. A.a. Par contrats des 3/4 juin 2009, E._, en qualité de bailleur, avait remis à bail à C._ et à son frère D._, en qualité de locataires, un appartement de 4,5 pièces au rez-de-chaussée d'un immeuble à Epalinges, ainsi qu'une place de parking extérieure, pour une période initiale du 15 juin 2009 au 1er juillet 2010, se renouvelant ensuite d'année en année sauf résiliation donnée par l'une ou l'autre des parties quatre mois à l'avance. C._ habite en réalité l'appartement avec son époux B._. D._, à Crissier, n'y habite pas ou plus. A.b. A la suite d'une procédure en contestation du loyer initial, le loyer convenu de 2'100 fr. par mois (+ 200 fr. d'acompte de chauffage et eau chaude et de frais accessoires, ainsi que 60 fr. pour la place de parking) a été réduit par transaction judiciaire passée devant le Tribunal des baux le 19 janvier 2010 à 1'500 fr. par mois (avec les mêmes acompte et loyer de la place de parking). Les résiliations des baux de l'appartement et de la place de parking notifiées par E._ le 7 février 2013 pour le 1er juillet 2013 ont été annulées par jugement du Tribunal des baux du 26 mai 2014, lequel a été confirmé par arrêt de la Cour d'appel civile du Tribunal cantonal du 26 février 2015. En bref, il a été retenu que le besoin propre invoqué par le bailleur était douteux et que, vu la proximité des résiliations avec l'échéance du délai de protection de trois ans, celles-ci devaient être qualifiées de congés de représailles. B. B.a. En décembre 2016, à la suite du décès de sa mère, A._ a hérité de cet appartement, avec place de parking. Elle a déclaré qu'il s'agit du seul bien immobilier dont elle est propriétaire, ce qui n'est pas contesté. A._, qui a effectué une formation de pasteur de l'Église réformée, a été en stage dans le Jura bernois. Celui-ci allait se terminer au mois de mai 2018. Désirant revenir dans la région lausannoise, après la fin de son stage, pour y travailler et y fonder une famille, la nouvelle propriétaire a déposé sa candidature auprès de l'Église réformée vaudoise pour un poste de pasteur à compter du 1er juin 2018. Le 13 février 2017, indiquant qu'elle souhaitait occuper, respectivement utiliser elle-même son appartement et la place de parking dès la fin mai 2018, la nouvelle propriétaire et bailleresse a, par l'intermédiaire de son avocat, résilié les baux quatre mois à l'avance, pour l'échéance du 1er juillet 2017 (résiliations ordinaires). B.b. Par requête de conciliation adressée à la Commission de conciliation en matière de baux à loyer de Lausanne le 13 mars 2017, C._ et son mari B._, ainsi que D._ (ci-après: les demandeurs) ont ouvert action en contestation des résiliations, concluant à leur annulation et, subsidiairement, à une première prolongation du bail d'une durée de trois ans. Ayant formé opposition à la proposition de jugement que la Commission leur avait faite, les demandeurs ont déposé leur demande devant le Tribunal des baux le 5 juillet 2017, reprenant les mêmes conclusions. A l'audience du 22 novembre 2017, le tribunal a interrogé la nouvelle propriétaire et bailleresse et a entendu trois témoins. La bailleresse a indiqué qu'elle souhaitait habiter son appartement avec son ami et y fonder une famille, qu'elle souhaitait travailler dans la région lausannoise après la fin de son stage et avait pris contact avec le pasteur en charge des ressources humaines de l'Église réformée vaudoise. Interrogé comme témoin, celui-ci a indiqué qu'il était à 90% certain que A._ obtiendrait un poste à Lausanne en juin 2018. Le tribunal a tenu une audience de jugement le 9 janvier 2018. Par jugement du même jour, le Tribunal des baux a jugé que les résiliations de l'appartement et de la place de parking étaient valables, a accordé une seule et unique prolongation aux demandeurs jusqu'au 31 janvier 2019 et leur a donné l'ordre de quitter l'appartement et la place de parking, ainsi que leurs dépendances au plus tard le 31 janvier 2019, à défaut de quoi la bailleresse était autorisée à avoir recours à l'huissier du tribunal pour que celui-ci procède, si nécessaire avec l'assistance de la force publique, à l'exécution forcée du jugement, avec au besoin l'ouverture forcée des locaux. En bref, il a considéré que bien que formées avant l'échéance du délai de trois ans de l'art. 271a al. 1 let. e CO, les résiliations étaient valables car la bailleresse avait démontré son besoin urgent d'utiliser elle-même les locaux: elle avait la ferme intention de revenir habiter dans la région lausannoise et d'y travailler dès la fin de sa formation en mai 2018; cet appartement était le seul bien immobilier dont elle était propriétaire et on ne pouvait exiger d'elle qu'elle renonce à occuper son appartement à son retour dans le canton de Vaud, ni qu'elle patiente jusqu'à l'échéance du 1er juillet 2018 puisque celle-ci était postérieure à son retour de juin 2018. L'urgence existait d'autant plus que la bailleresse pouvait raisonnablement penser que les locataires ouvriraient action en annulation des résiliations et/ou en prolongation du bail. En ce qui concerne l'unique prolongation de bail accordée, le tribunal a tenu compte de la situation respective des parties. En appel, les demandeurs ont conclu principalement à ce que les résiliations soient annulées et, à titre subsidiaire, à ce que la prolongation des baux leur soit accordée jusqu'au 1er juillet 2020, ordre leur étant donné de quitter les locaux à cette date, au besoin en ayant recours à l'huissier avec l'aide de la force publique " à condition qu'ils n'aient requis aucune prolongation ". Statuant le 1er novembre 2018, la Cour d'appel civile du Tribunal cantonal du canton de Vaud a admis l'appel et a réformé le jugement attaqué en ce sens que la demande est admise et que les résiliations sont annulées. Constatant que la nouvelle propriétaire et bailleresse avait résilié le bail le 13 février 2017 pour le 1er juillet 2017 en invoquant qu'elle voulait occuper elle-même l'appartement, ainsi que la place de parking, à la fin de son stage pastoral dans le Jura bernois en mai 2018, la cour cantonale a, contrairement aux premiers juges, nié l'existence d'un besoin urgent pour quatre raisons: Premièrement, elle a considéré que la bailleresse n'a pas résilié le bail parce qu'elle entamerait une activité lucrative dès fin mai 2018, puisqu'au moment de la résiliation des baux, elle n'était pas encore au bénéfice d'un contrat de travail dans la région de Lausanne, ni n'avait entrepris de démarches concrètes dans ce sens. Elle n'en a parlé sérieusement au pasteur responsable qu'en août 2017 et n'a déposé son dossier de candidature qu'au mois d'octobre 2017, de sorte qu'il ne s'agissait que d'un besoin futur, simplement possible, insuffisant au regard de la jurisprudence. Deuxièmement, il n'était pas allégué ni établi que le poste qu'elle souhaitait était lié à un emménagement à Epalinges et rien n'indique qu'elle n'aurait pas pu trouver un logement provisoire et ne résilier les baux qu'à l'échéance du délai de trois ans en février 2018 pour le 1er juillet 2018, en lieu et place du 1er juillet 2017. Selon la cour cantonale, elle aurait pu provisoirement aller habiter dans l'appartement de son frère qui était libre puisqu'il vivait à l'étranger. Troisièmement, la cour cantonale a considéré qu'il n'est pas établi que le projet professionnel de la bailleresse évoqué en procédure se serait réalisé, puisque, selon les informations trouvées sur internet, elle occupe un poste de pasteur à... depuis le 1er juillet 2018, ce qu'elle n'avait pas indiqué dans sa réponse à l'appel, et, à supposer que son besoin urgent soit établi, elle n'aurait pu occuper l'appartement d'Epalinges, puisqu'elle doit demeurer à proximité de son lieu de travail. Enfin, quatrièmement, si, pour admettre le caractère de l'urgence, on devait tenir compte du risque qu'une procédure soit intentée par les locataires, on serait contraint de le reconnaître dans tous les cas, sans analyse des circonstances propres au cas d'espèce. C. Contre cet arrêt, la nouvelle propriétaire et bailleresse a interjeté un recours en matière civile au Tribunal fédéral le 5 décembre 2018, concluant à sa réforme en ce sens que le jugement du Tribunal des baux du 9 janvier 2018 est confirmé. Les intimés concluent au rejet du recours. En bref, ils soutiennent que la bailleresse n'a fondamentalement pas eu l'intention de retrouver une activité lucrative du côté de Lausanne, de sorte que le motif de résiliation ne serait qu'un prétexte; ils lui reprochent de n'avoir pas invoqué les faits nouveaux en relation avec la modification de sa situation professionnelle et globalement se rallient à la motivation de la cour cantonale. Les intimés ayant disposé, en raison des féries et de la prolongation de délai accordée, d'un temps suffisamment long pour se déterminer, et la recourante obtenant gain de cause sur le principe, il sera renoncé à un second échange d'écritures.