French rider Johann Zarco, the double Moto2 world champion but a rookie in the top category, took his first MotoGP podium with second place on the non-works Tech3 Yamaha after leading for the first seven laps.
Spaniard Dani Pedrosa, whose triple world champion team mate Marc Marquez crashed out of fourth place on lap 18, inherited third for Honda.
After five rounds of the championship, Vinales has 85 points with Pedrosa moving up to second on 68. Italian Rossi has 62 and Marquez 58.
France Grand Prix
Lorenzo saved 'difficult situation' in France
22/05/2017 AT 14:48
The victory was Yamaha's 500th in grand prix racing but it looked like going to Rossi rather than Vinales after the 38-year-old Italian took the lead with three laps to go and started to pull away.
He led by 0.4 seconds into the final lap but Vinales, who had qualified on pole position with Rossi alongside, was closing and a last lap mistake by the man regarded by many as the greatest of all time opened the door.
As Rossi threw everything at the Spaniard to try and undo his error, the bike slid from under him at turn 11 and dumped the Italian into the gravel.
"Incredible. I just gave my best in the last lap," said Vinales. "I tried to push Vale at 100 percent...I saw Vale make a mistake so I took my opportunity. I pushed 200 percent to try and go away and finally the victory."
The win was Vinales's third of the season and he also set the fastest lap at the end.
Zarco's second place made him the first Frenchman on a home MotoGP podium since Christian Sarron was second at Le Castellet in the 500cc race in 1988, and the first in MotoGP since Randy De Puniet in 2009.
He said he had been fired up by the playing of the national anthem before the start and had hoped to hear it again at the end.
"Vinales overtook me and it was not easy to stay behind him...then when Rossi passed me, he was quite strong. He caught Vinales in a small moment and then they were fighting," Zarco said.
"I expected that maybe it was going to be a big fight and some crash and, yes, Vale crashed."
France Grand Prix
Vinales leads all-Yamaha front row in France
20/05/2017 AT 13:37
France Grand Prix
Lorenzo 'didn't feel safe' in wet practice
19/05/2017 AT 17:47